UIStackView 的背景
UIStackView 的背景
UIStackView 作为布局组件,本身的 drawRect
是不会被调用的,其 backgroundColor
属性会被忽略。
所以,虽然以下设置 backgroundColor
的代码是合法能够编译的,但其实并不起作用。
UIStackView *view = [UIStackView new];
view.backgroundColor = [UIColor redColor];
要设置 UIStackView 的背景,就只能变通来做,
- 将其添加到另一个 UIView 中,设置后者的背景色
- 或者添加一个子元素到其中专门用来设置背景色。
第一种方法好理解,既然 UIStackView 没有背景色,那自然它放哪就用的谁的背景。
第二种方式可通过扩展 UIStackView 来做:
Objecitve-C 版本:
- (void)addBackground:(UIColor *)color {
UIView *subView = [[UIView alloc] initWithFrame:self.bounds];
subView.backgroundColor = color;
subView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self insertSubview:subView atIndex:0];
}
NOETS:其中 autoresizingMask
指定视图在父级元素尺寸发生变化时自身如何重新适配。这里即背景层始终保持填充父级元素。
使用:
UIStackView *view = [UIStackView new];
[view addBackground:[UIColor redColor]];
Swift 版本:
extension UIStackView {
func addBackground(color: UIColor) {
let subView = UIView(frame: bounds)
subView.backgroundColor = color
subView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
insertSubview(subView, at: 0)
}
}