我正在更新我的应用程序以使用UIStackViews,现在大多数人应该已经更新到iOS9了。
在旧版本中,我创建了一个由两个UITextFields组成的UIView,并设置了它的layer.cornerRadius属性。
在新版本中,我创建了一个UIStackView,它由相同的两个UITextFields组成,而不是UIView。当我尝试设置其layer.conerRadius属性时,似乎什么都没有发生。文档中似乎没有任何有用/相关的信息。
UIStackView
只管理其排列视图的位置和大小,cornerRadius没有任何影响。尝试在stackView下面添加一个自定义视图,并设置其cornerRadius。
您可以使用这样的扩展:
extension UIStackView {
func customize(backgroundColor: UIColor = .clear, radiusSize: CGFloat = 0) {
let subView = UIView(frame: bounds)
subView.backgroundColor = backgroundColor
subView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
insertSubview(subView, at: 0)
subView.layer.cornerRadius = radiusSize
subView.layer.masksToBounds = true
subView.clipsToBounds = true
}
}
在stackview的超级视图上添加cornerRadius,并启用超级视图的clipseToBounds属性,以便将子视图限制在超级视图的边界内。
如果您想为StackView:提供背景颜色、角半径和阴影
extension UIStackView {
func insertCustomizedViewIntoStack(background: UIColor, cornerRadius: CGFloat, shadowColor: CGColor, shadowOpacity: Float, shadowRadius: CGFloat) {
let subView = UIView(frame: bounds)
subView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
subView.layer.cornerRadius = cornerRadius
subView.backgroundColor = background
subView.layer.shadowColor = shadowColor
subView.layer.shadowOpacity = shadowOpacity
subView.layer.shadowOffset = .zero
subView.layer.shadowRadius = shadowRadius
insertSubview(subView, at: 0)
}
}
如果您想为StackView:提供backgroundColor、CornerRadius、borderColor和边框宽度
extension UIStackView {
func insertViewIntoStack(background: UIColor, cornerRadius: CGFloat, borderColor: CGColor, borderWidth: CGFloat) {
let subView = UIView(frame: bounds)
subView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
subView.layer.cornerRadius = cornerRadius
subView.backgroundColor = background
subView.layer.borderColor = borderColor
subView.layer.borderWidth = borderWidth
insertSubview(subView, at: 0)
}
}
如果您在Interface Builder中,您可以执行以下操作:
-
将StackView嵌入到视图中。(菜单->编辑器->嵌入->视图)
-
添加约束,使StackView精确地约束到新的superView。
小心!xCode是非常误导性的,因为如果你在导航器(左边)上看到它显示了你的约束,你可能会认为";bottom=stackView.bottom";意味着它们完全对齐。但是没有!默认情况下,xCode使用标准约束。你可以在xib的显示中看到它,但它很微妙,很令人困惑。看看Inspector(右边),约束的细节在哪里,你会发现常数是"0";标准";。将其更改为0!
-
在视图中将clipToBounds复选标记。(检查员,朝向底部)
-
将所需的拐角半径添加到视图中。(检查员,朝上)
如果您的StackView在运行时是动态调整大小的,那么使用subView的答案是有问题的。如果使用具有将其连接到StackView的约束的超视图(视图),则这不是问题。
如果背景颜色是您正在进行的特定布局中的一个因素,请注意超级视图中的背景颜色。还有阴影,正如在这里的其他答案中提到的。
如果我设置,它对我有效
stackView.layer.cornerRadius=5
只要将子视图的backgroundColor设置为清除
在我的例子中,stackView的backgroundColor负责内部视图的背景色,所以它很适合我。