如何在UIStackView内设置UIView的背景颜色?

时间:2019-01-20 05:35:28

标签: ios swift xcode uiview uistackview

我正在制作一个“详细信息”屏幕,该页面在Storyboard View Controller中具有多个嵌套视图:ScrollView> UIView> StackView> 5个UI Views。每个UI视图都是一个包含标签和编辑文本的不同部分。

当我在情节提要中设置一个UIView的背景时,它会更改,但在运行模拟器或在iPad上时不会反映此更改。

下面是一张图片,左侧是仿真器视图,右侧是Xcode中的Storyboard。您可以看到,情节提要时模拟器在嵌套的UIView上没有显示背景颜色。

Emulator vs Storyboard

因为要求提供的是完整的故事板。很难看清,但它是一个连接到三个拆分视图控制器的选项卡视图控制器。

Full Storyboard

通过仅使用特定视图进行测试,我将其范围缩小到包含导致问题的5个UIView的UIStackView。我尝试附加一个控制器并更改代码中的颜色,但是我尝试过的任何事情似乎都没有改变它。

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)
    }
}

我希望每个部分(UIView)都是深灰色,但是它们都是透明的,因此可以看到滚动视图背景色。

3 个答案:

答案 0 :(得分:2)

UIStackView不允许更改背景颜色:

  

UIStackView是UIView的非呈现子类;也就是说,它不提供自己的任何用户界面。相反,它仅管理其排列视图的位置和大小。结果,某些属性(如backgroundColor)对堆栈视图没有影响。同样,您不能覆盖layerClass,draw( :)或draw(:in:)。

(来自UIStackView

一个简单的解决方法是在堆栈视图后面添加另一个UIView,设置约束以匹配堆栈视图的位置和大小(相等的顶部,左侧,右侧,底部)并更改该视图的背景颜色

答案 1 :(得分:1)

enter image description here我认为您首先应该为ui视图赋予不同的背景颜色,然后再放置它们。在单个堆栈下,检查其是否正常工作

我添加了一个屏幕截图,其中我先给UIviews提供了背景色,然后将它们放在一个stackView下,但是在仅从左侧控制器下的uielements中给它们提供背景色之后,它们具有与您不同的那些颜色,然后选择Uiviews并放置它们在堆栈视图下

答案 2 :(得分:0)

好,请检查一下颜色。 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)
相关问题