我正在更新我的应用程序使用UIStackViews,现在大多数人应该已经升级到iOS 9。
在旧版本中,我创建了一个UIView,其中包含两个UITextFields,并设置其layer.cornerRadius属性。
在新版本中,我创建了一个包含相同两个UITextFields的UIStackView,而不是UIView。当我尝试设置其layer.cornerRadius属性时,似乎什么也没有发生。文档中似乎没有任何有用/相关的信息。
我正在更新我的应用程序使用UIStackViews,现在大多数人应该已经升级到iOS 9。
在旧版本中,我创建了一个UIView,其中包含两个UITextFields,并设置其layer.cornerRadius属性。
在新版本中,我创建了一个包含相同两个UITextFields的UIStackView,而不是UIView。当我尝试设置其layer.cornerRadius属性时,似乎什么也没有发生。文档中似乎没有任何有用/相关的信息。
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
}
}
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和border width:
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)
}
}
将你的StackView嵌入到一个View中。(菜单->编辑->嵌入->视图)
添加约束使得StackView恰好限制在新的父视图中。
要小心!xCode非常容易误导人。如果你看到左侧的Navigator显示了你的约束,你可能会认为“bottom = stackView.bottom”意味着它们完全对齐。但不是这样的!默认情况下,xCode使用标准约束。你可以在xib图形化显示区域中看到它,但它很微妙且令人困惑。查看右侧的Inspector以获取约束的详细信息,你会发现常数是“Standard”。将其更改为0!
在View中勾选clipToBounds。(Inspector向下)
向View中添加所需的圆角半径。(Inspector向上)
如果我设置,它对我有效。
stackView.layer.cornerRadius=5
只要将子视图的backgroundColor设置为.clear即可。 在我的情况下,stackView的backgroundColor负责内部视图的背景颜色,所以它适合我。