如何在 UIStackView 中设置 UIView 的背景颜色?
How to set background color of UIView inside of UIStackView?
我正在制作一个详细信息屏幕,它在 Storyboard View Controller 中有几个嵌套视图:ScrollView > UIView > StackView > 5 UI Views。每个 UI 视图都是一个包含标签和编辑文本的不同部分。
当我在故事板中设置 UI 视图之一的背景时,它会发生变化,但当我 运行 模拟器或 iPad 上时,它不会反映此变化。
下图左边是模拟器视图,右边是Xcode中的Storyboard。您可以看到模拟器在嵌套的 UIView 上没有显示背景颜色,而 Storyboard 显示。
Emulator vs Storyboard
因为有人要求这里是完整的情节提要。很难看到,但它是一个连接到三个拆分视图控制器的选项卡视图控制器。
Full Storyboard
通过仅使用特定视图进行测试,我将范围缩小到 UIStackView 包含导致问题的 5 个 UI 视图。我试过附加一个控制器并更改代码中的颜色,但我尝试过的似乎都没有改变它。
class ClientDetailViewController: UIViewController {
@IBOutlet weak var basicInfoUIView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
basicInfoUIView.backgroundColor = UIColor.init(displayP3Red: 22, green: 22, blue: 22, alpha: 0.5)
}
}
我希望每个部分(UI视图)都是深灰色,但它们都是透明的,因此可以看到滚动视图的背景颜色。
我想首先你应该给你的 ui 视图不同的背景颜色然后放置它们。单栈下查看是否工作
我添加了一个屏幕截图,其中我首先为 UIviews 提供了背景颜色,然后将它们放在一个 stackView 下,但是在简单地从控制器下的 ui 元素为它们提供背景颜色之后,它们的颜色与您不同左边选择 Uiviews 并将它们放在 stack View
下
嗯,请检查您的颜色。 22 不应该属于 [0,1]。
basicInfoUIView.backgroundColor = UIColor.init(displayP3Red: 22.0 / 255.0, green: 22.0 / 255.0, blue: 22.0 / 255.0, alpha: 0.5)
UIStackView
不允许更改背景颜色:
The UIStackView is a nonrendering subclass of UIView; that is, it does not provide any user interface of its own. Instead, it just manages the position and size of its arranged views. As a result, some properties (like backgroundColor) have no effect on the stack view. Similarly, you cannot override layerClass, draw(:), or draw(:in:).
(来自 UIStackView)
一个简单的解决方法是在堆栈视图后面添加另一个 UIView
,设置约束以匹配堆栈视图的位置和大小(等于顶部、左侧、右侧、底部)并更改背景颜色那个观点。
我正在制作一个详细信息屏幕,它在 Storyboard View Controller 中有几个嵌套视图:ScrollView > UIView > StackView > 5 UI Views。每个 UI 视图都是一个包含标签和编辑文本的不同部分。
当我在故事板中设置 UI 视图之一的背景时,它会发生变化,但当我 运行 模拟器或 iPad 上时,它不会反映此变化。
下图左边是模拟器视图,右边是Xcode中的Storyboard。您可以看到模拟器在嵌套的 UIView 上没有显示背景颜色,而 Storyboard 显示。
Emulator vs Storyboard
因为有人要求这里是完整的情节提要。很难看到,但它是一个连接到三个拆分视图控制器的选项卡视图控制器。
Full Storyboard
通过仅使用特定视图进行测试,我将范围缩小到 UIStackView 包含导致问题的 5 个 UI 视图。我试过附加一个控制器并更改代码中的颜色,但我尝试过的似乎都没有改变它。
class ClientDetailViewController: UIViewController {
@IBOutlet weak var basicInfoUIView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
basicInfoUIView.backgroundColor = UIColor.init(displayP3Red: 22, green: 22, blue: 22, alpha: 0.5)
}
}
我希望每个部分(UI视图)都是深灰色,但它们都是透明的,因此可以看到滚动视图的背景颜色。
我添加了一个屏幕截图,其中我首先为 UIviews 提供了背景颜色,然后将它们放在一个 stackView 下,但是在简单地从控制器下的 ui 元素为它们提供背景颜色之后,它们的颜色与您不同左边选择 Uiviews 并将它们放在 stack View
下嗯,请检查您的颜色。 22 不应该属于 [0,1]。
basicInfoUIView.backgroundColor = UIColor.init(displayP3Red: 22.0 / 255.0, green: 22.0 / 255.0, blue: 22.0 / 255.0, alpha: 0.5)
UIStackView
不允许更改背景颜色:
The UIStackView is a nonrendering subclass of UIView; that is, it does not provide any user interface of its own. Instead, it just manages the position and size of its arranged views. As a result, some properties (like backgroundColor) have no effect on the stack view. Similarly, you cannot override layerClass, draw(:), or draw(:in:).
(来自 UIStackView)
一个简单的解决方法是在堆栈视图后面添加另一个 UIView
,设置约束以匹配堆栈视图的位置和大小(等于顶部、左侧、右侧、底部)并更改背景颜色那个观点。