如何设置UIStackView的角半径



我正在更新我的应用程序以使用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中,您可以执行以下操作:

  1. 将StackView嵌入到视图中。(菜单->编辑器->嵌入->视图)

  2. 添加约束,使StackView精确地约束到新的superView。

小心!xCode是非常误导性的,因为如果你在导航器(左边)上看到它显示了你的约束,你可能会认为";bottom=stackView.bottom";意味着它们完全对齐。但是没有!默认情况下,xCode使用标准约束。你可以在xib的显示中看到它,但它很微妙,很令人困惑。看看Inspector(右边),约束的细节在哪里,你会发现常数是"0";标准";。将其更改为0!

  1. 在视图中将clipToBounds复选标记。(检查员,朝向底部)

  2. 将所需的拐角半径添加到视图中。(检查员,朝上)

如果您的StackView在运行时是动态调整大小的,那么使用subView的答案是有问题的。如果使用具有将其连接到StackView的约束的超视图(视图),则这不是问题。

如果背景颜色是您正在进行的特定布局中的一个因素,请注意超级视图中的背景颜色。还有阴影,正如在这里的其他答案中提到的。

如果我设置,它对我有效

stackView.layer.cornerRadius=5

只要将子视图的backgroundColor设置为清除

在我的例子中,stackView的backgroundColor负责内部视图的背景色,所以它很适合我。

相关内容

  • 没有找到相关文章

最新更新