我开始尝试SwiftUI,我很惊讶,它似乎不是简单的改变一个视图的背景颜色。你如何使用SwiftUI做到这一点?
你可以这样做:
.background(Color.black)
围绕着你的视野。
如。从默认模板(我把它包围在一个组):
var body: some View {
VStack {
Text("Hello SwiftUI!")
}
.background(Color.black)
}
为了添加一些不透明度,你也可以添加.opacity方法:
.background(Color.black.opacity(0.5))
你也可以通过CMD +单击视图,然后单击Show SwiftUI Inspector > Background > Your Color来使用视图的inspect元素
屏幕背景色
(从Xcode Version 13开始)
我不确定最初的海报是指整个屏幕的背景色还是单个视图的背景色。我将添加这个答案,即设置整个屏幕的背景色。
使用ZStack
var body: some View {
ZStack {
Color.purple
.ignoresSafeArea()
// Your other content here
// Other layers will respect the safe area edges
}
}
我添加了. ignoressafearea(),否则,它将停止在安全区域边缘。
使用叠加修饰符
var body: some View {
Color.purple
.ignoresSafeArea(.vertical) // Ignore just for the color
.overlay(
VStack(spacing: 20) {
Text("Overlay").font(.largeTitle)
Text("Example").font(.title).foregroundColor(.white)
})
}
注意:重要的是保持. ignoressafearea为颜色,这样你的主要内容就不会忽略安全区域的边缘。
iOS 15
iOS 15/Xcode 13引入了一些改变样式在安全区域边缘的工作方式。
根据我的观察,规则是:如果样式触及安全区边缘,它就会渗入安全区。
这为设置背景颜色/样式提供了更多选项。
什么是风格?
样式可以是:
颜色 材质(模糊效果) 分层视图(。第二、第三、第四系) 梯度
使用背景
因为VStack的背景接触到安全区域的边缘,紫色会渗入安全区域。
var body: some View {
VStack {
Text("Hello, World!")
Divider()
Spacer()
}
.background(Color.purple)
}
TabView
在iOS 15中,TabView不再是半透明的。这意味着背景色会直接渗透进去。
如果你想为你的TabView提供一个自定义样式,你可以添加另一个触碰底部安全区域边缘的样式,这样它就会渗透到你的TabView中。例如:
var body: some View {
TabView {
VStack {
Text("Hello, World!")
Divider()
Spacer()
// Bleeds into TabView
Rectangle()
.frame(height: 0)
.background(.thinMaterial)
}
.background(Color.purple)
.tabItem {
Text("Tab 1")
Image(systemName: "wifi")
}
}
}
NavigationView
发生在TabView上的事情也会发生在NavigationView上。
要自定义NavigationView样式,添加一个触摸顶部安全区域边缘的样式,它将渗透到NavigationView:
var body: some View {
NavigationView {
VStack {
// Bleeds into NavigationView
Rectangle()
.frame(height: 0)
.background(.ultraThinMaterial)
Text("Hello, World!")
Divider()
Spacer()
}
.background(Color.purple)
.navigationTitle(Text("Style"))
}
}
我完全愿意用其他方式来实现这个目标。如果你知道其他方法,请留下评论或编辑这个答案。
像这样
struct ContentView : View {
@State var fullName: String = "yushuyi"
var body: some View {
VStack
{
TextField($fullName).background(SwiftUI.Color.red)
Spacer()
}.background(SwiftUI.Color.yellow.edgesIgnoringSafeArea(.all))
}
}
这个解决方案有效吗?:
添加以下行到SceneDelegate: window.rootViewController?backgroundColor = .black
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
if let windowScene = scene as? UIWindowScene {
window.rootViewController?.view.backgroundColor = .black
}
(SwiftUI / Xcode 11)
1 .background(Color.black) //系统颜色
2 .background(Color("green")) //用于您在Assets.xcassets中创建的颜色
或者你可以用Command+Click在元素上改变它。
希望能有所帮助:)
列表:
所有SwiftUI的列表都是由uitableview iOS支持的。所以你需要改变tableView的背景颜色。但由于Color和UIColor值略有不同,你可以去掉UIColor。
struct ContentView : View {
init(){
UITableView.appearance().backgroundColor = .clear
}
var body: some View {
List {
Section(header: Text("First Section")) {
Text("First Cell")
}
Section(header: Text("Second Section")) {
Text("First Cell")
}
}
.background(Color.yellow)
}
}
现在你可以使用你想要的任何背景(包括所有颜色)
首先看看这个结果:
正如你所看到的,你可以像这样设置视图层次结构中每个元素的颜色:
struct ContentView: View {
init(){
UINavigationBar.appearance().backgroundColor = .green
//For other NavigationBar changes, look here:(https://stackoverflow.com/a/57509555/5623035)
}
var body: some View {
ZStack {
Color.yellow
NavigationView {
ZStack {
Color.blue
Text("Some text")
}
}.background(Color.red)
}
}
}
第一个是window:
window.backgroundColor = .magenta
常见的问题是我们还不能删除SwiftUI的HostingViewController的背景色,所以我们不能通过视图层次结构看到一些视图,比如navigationView。您应该等待API或尝试伪造这些视图(不推荐)。
你可以简单地改变一个视图的背景颜色:
var body : some View{
VStack{
Color.blue.edgesIgnoringSafeArea(.all)
}
}
你也可以使用ZStack:
var body : some View{
ZStack{
Color.blue.edgesIgnoringSafeArea(.all)
}
}
填充整个屏幕:
var body: some View {
Color.green.edgesIgnoringSafeArea(.all)
}
Code | Result |
---|---|
我喜欢声明一个修饰符来改变视图的背景颜色。
extension View {
func background(with color: Color) -> some View {
background(GeometryReader { geometry in
Rectangle().path(in: geometry.frame(in: .local)).foregroundColor(color)
})
}
}
然后我通过将颜色传递给视图来使用修饰符。
struct Content: View {
var body: some View {
Text("Foreground Label").foregroundColor(.green).background(with: .black)
}
}
Swift UI中场景委托上的代码
内容查看background-color
window.rootViewController ? .view。backgroundColor = .lightGray
Xcode 11.5
简单地使用ZStack添加背景颜色或图像到你的SwiftUI的主视图
struct ContentView: View {
var body: some View {
ZStack {
Color.black
}
.edgesIgnoringSafeArea(.vertical)
}
}
NavigationView例子:
var body: some View {
var body: some View {
NavigationView {
ZStack {
// Background
Color.blue.edgesIgnoringSafeArea(.all)
content
}
//.navigationTitle(Constants.navigationTitle)
//.navigationBarItems(leading: cancelButton, trailing: doneButton)
//.navigationViewStyle(StackNavigationViewStyle())
}
}
}
var content: some View {
// your content here; List, VStack etc - whatever you want
VStack {
Text("Hello World")
}
}
struct Soview: View {
var body: some View {
VStack{
Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
.frame(maxWidth:.infinity,maxHeight: .infinity)
}.background(Color.yellow).ignoresSafeArea(.all)
}
}
要制作一个中央/可重用的后台小部件,您可以这样做-
import SwiftUI
struct BgView<Content>: View where Content: View {
private let content: Content
public init(@ViewBuilder content: () -> Content) {
self.content = content()
}
var body : some View {
ZStack {
Color.black.ignoresSafeArea()
content
}
}
}
并且可以像下面这样轻松地在所有视图中使用-
import SwiftUI
struct TestView: View {
var body: some View {
BgView{
Text("Hello, World!")
}.foregroundColor(.white)
}
}
struct TestView_Previews: PreviewProvider {
static var previews: some View {
TestView()
}
}
背景颜色
(Xcode 14.2, iOS 16.3, SwiftUI 4.0)
1. 文本
要在文本视图中扩展BG颜色,请使用.frame()修饰符的maxWidth和maxHeight参数。
var body: some View { // PINK COLOR
Text("one")
.frame(maxWidth: .infinity, maxHeight: .infinity)
.foregroundColor(.white)
.font(.system(size: 100))
.background(.pink)
}
2. ZStack
要填充ZStack视图的背景,使用Color对象作为基础层。
var body: some View { // YELLOW COLOR
ZStack {
Color.yellow.ignoresSafeArea()
Text("two").font(.system(size: 100))
}
}
3.VStack | HStack
如果你想给VStack或HStack分配一个新的BG颜色,请对堆栈本身应用修饰符。
var body: some View { // TEAL COLOR
VStack {
Text("three").font(.system(size: 100))
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(.teal)
}
4. 梯度
你可以使用矩形忽略屏幕的安全区域,并用渐变填充屏幕。
var body: some View { // PURPLISH GRADIENT
ZStack {
Rectangle()
.fill(Gradient(colors: [.indigo, .purple]))
.ignoresSafeArea()
Text("four").font(.system(size: 100))
.foregroundColor(.white)
}
}
5. 颜色方案|反色
颜色反转是一种简单而聪明的解决方案。
var body: some View { // INVERSION OF A COLOR
ZStack {
List {
ForEach(1..<6) { version in
HStack {
Image(systemName: "swift")
Text("Swift \(version).0")
}
}
}
Text("five").font(.system(size: 100))
}
.environment(\.colorScheme, .dark)
// .colorInvert()
}
6. 图像
无缩进图像可以包含纯色或渐变。
var body: some View { // GREEN JPEG as BG COLOR
ZStack {
Image("green")
.resizable()
.ignoresSafeArea()
.brightness(-0.2)
Text("six").font(.system(size: 100))
.foregroundColor(.white)
}
}
混合模式
在SwiftUI中,也有影响背景颜色和/或图像颜色的合成技术。点击这里阅读photoshop的混合模式。
解决方案:
你可以创建一个彩色视图,并将其设置为VStack背景。
struct ColoredView: UIViewRepresentable {
var color: Color
func makeUIView(context: Context) -> UIView {
let view = UIView()
view.backgroundColor = UIColor(color)
DispatchQueue.main.async {
view.superview?.superview?.backgroundColor = .clear
}
return view
}
func updateUIView(_ uiView: UIView, context: Context) {}
}
用法:
VStack {
Text("VStack with Red backgound")
Text("VStack with Red backgound")
Text("VStack with Red backgound")
Text("VStack with Red backgound")
}.background(ColoredView(color: .red))
结果:
我不知道为什么没有人这么说,但是background()修饰符旨在设置背景颜色,并且支持ignoresSafeArea():
var body: some View {
Text("Da ba dee")
.background(Color.blue.ignoresSafeArea())
}
首先,你应该使用
ZStack {
Color("Desired_color_name").ignoresSafeArea()
// if you create any color set then give that colour set name
// otherwise use Color.gray or as you want the colour name
//Here you should start your design
}
推荐文章
- 我如何改变一个视图的背景颜色?
- 是否有一种方法以编程方式滚动滚动视图到特定的编辑文本?
- 如何使用@Binding变量实现自定义初始化
- 如何在PostgreSQL中查看视图的CREATE VIEW代码?
- 如何在Android中进行平滑的图像旋转?
- setBackground vs setBackgroundDrawable (Android)
- 谷歌Chrome显示JSON AJAX响应树,而不是纯文本
- Sass -转换十六进制为RGBa的背景不透明度
- 在ViewPager中替换Fragment
- 在Visual Studio调试器中查看数组?
- SwiftUI文本对齐方式
- 在线性布局中以编程方式设置边距
- 背景图像上的半透明彩色层?
- 如何使梯度背景在android
- 如何创建圆角EditText ?