clipsToBounds 在 UIStackView 中似乎没有效果

Bil*_*l L 6 ios autolayout swift

是否可以在 a 之外渲染子视图UIStackView?我有一个带有按钮和标签的垂直堆栈视图,我使用堆栈视图的宽度来适当地设置按钮的高度和宽度:

addArrangedSubview(self.loginMethodButton)
let widthConstraint = NSLayoutConstraint(item: self.loginMethodButton, attribute: .width, relatedBy: .equal, toItem: self, attribute: .width, multiplier: 1.0, constant: 0.0)
let heightConstraint = NSLayoutConstraint(item: self.loginMethodButton, attribute: .height, relatedBy: .equal, toItem: self.loginMethodButton, attribute: .width, multiplier: 1.0, constant: 0.0)
NSLayoutConstraint.activate([widthConstraint, heightConstraint])
Run Code Online (Sandbox Code Playgroud)

然后我根据情况将 viewController 中的宽度调整为适当的大小。问题是,在按钮需要的较小尺寸之一中,宽度小于其下方的标签,这会切断标签。

在此处输入图片说明

如果我sizeToFit()在设置标签时调用,它可以工作,但是,在设置标签sizeToFit()后调整尺寸时调用仍然会导致标签被切断。clipsToBounds在标签和堆栈视图上设置为 false 无效。

是否可以在堆栈视图之外渲染视图?或者我是否必须找到一种方法来重新处理我的约束以解决这个问题?

Don*_*Mag 5

UIStackView 是一个“非渲染”对象......它所做的只是安排其他视图。

如果问题是UILabel您的堆栈视图提供的区域太宽,则您需要将标签设置为“自动缩小”字体,或者您需要更改堆栈视图约束以允许更广泛的标签。

编辑 根据您的其他评论,以下内容不正确。

您需要.clipsToBounds在“包含”视图上进行设置...根据您显示的图形,那将是深蓝色框(我假设这是一个UIView带有图像和标签的子视图)。