clipsToBounds似乎在UIStackView中没有任何效果

时间:2017-11-16 16:22:59

标签: ios swift autolayout

是否可以在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])

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

enter image description here

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

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

1 个答案:

答案 0 :(得分:2)

UIStackView是"非呈现"对象...它所做的只是安排其他视图。

如果问题是您的UILabel太宽而无法放入Stack View提供的区域,那么您需要将标签设置为"自动缩小"字体,或者您需要更改堆栈视图约束以允许更宽的标签。

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

您需要在"上设置.clipsToBounds"查看...基于您正在显示的图形,这将是深蓝色框(我假设这是UIView,图像和标签为子视图)。