let stackView = UIStackView()
let subView = UIView()
subView.backgroundColor = .red
subView.translatesAutoresizingMaskIntoConstraints = false
stackView.addSubview(subView) // Important: addSubview() not addArrangedSubview()
// use whatever constraint method you like to
// constrain subView to the size of stackView.
subView.topAnchor.constraint(equalTo: stackView.topAnchor).isActive = true
subView.bottomAnchor.constraint(equalTo: stackView.bottomAnchor).isActive = true
subView.leftAnchor.constraint(equalTo: stackView.leftAnchor).isActive = true
subView.rightAnchor.constraint(equalTo: stackView.rightAnchor).isActive = true
// now add your arranged subViews...
stackView.addArrangedSubview(button1)
stackView.addArrangedSubview(button2)
14 回答
参考来自HERE .
UIStackView
是一个非渲染元素,因此,它不会在屏幕上绘制 . 这意味着改变backgroundColor
基本上什么都不做 . 如果要更改背景颜色,只需将UIView
添加为子视图(未排列),如下所示:以下是添加堆栈视图背景颜色的简要概述 .
创建带圆角的背景视图
为了使它显示为背景,我们将它添加到索引0处的根堆栈视图的子视图数组中 . 这将它放在堆栈视图的排列视图后面 .
通过在UIView上使用小扩展,添加约束以将backgroundView固定到堆栈视图的边缘 .
从
viewDidLoad
调用pinBackground
参考来自:HERE
Xamarin,C#版本:
你可以这样做:
通过提供覆盖
backgroundColor
的扩展名:也许最容易,更可读和更少hacky的方法是将
UIStackView
嵌入UIView
并将背景颜色设置为视图 .并且不要忘记在这两个视图之间正确配置自动布局约束... ;-)
这适用于Swift 3和iOS 10:
在iOS10中,@ Arbitur的答案在设置颜色后需要setNeedsLayout . 这是需要的改变:
TL; DR:执行此操作的官方方法是使用
addSubview:
方法将空视图添加到堆栈视图中,并设置添加的视图背景 .解释:UIStackView是一个特殊的UIView子类,只做布局而不是绘图 . 它的许多属性都不会像往常那样起作用 . 并且由于UIStackView将仅布置其排列的子视图,这意味着您可以简单地使用
addSubview:
方法添加UIView,设置其约束和背景颜色 . 这是实现你想要的官方方式quoted from WWDC sessionPitiphong是正确的,要获得带有背景颜色的stackview,请执行以下操作...
这将为您提供一个堆栈视图,其内容将放置在红色背景上 .
要向stackview添加填充以使内容不与边缘齐平,请在代码中或故事板上添加以下内容...
您可以向StackView插入一个子图层,它适用于我:
我是这样做的:
奇迹般有效
子类UIStackView
然后在你的班上