我正在尝试将按钮的大小调整为(它的内在大小+更多一点)以绘制自定义背景。但是,每次我在按钮内访问self.titleLabel时,大小和位置都会重新转换为故事板的大小和位置。我没有对标签做任何事情来重现这一点,只需从按钮中检索它。
我已将记录代码放在我的按钮和视图控制器上,以便找到发生这种情况的位置。它不是来自子视图的中继或我在视图控制器中看到的任何其他通知。访问titleLabel之前的行,位置和大小都是正确的。之后,它已经回到故事板位置。注释掉访问可以防止大小/位置捕捉。有人能告诉我这种情况发生在何处或为何会发生?
我没有设置约束(我可以告诉),但我是否在这里反对自动布局?我是否应该采用不同的方式来组合控件或其他方式?
在UIButton modifying titlelabel seems to change its frame和UIButton titleLabel resizes on press?之前曾经问过类似(或相同?)的内容,但两者都没有得到答复,或者只是说“可能是个错误”。
答案 0 :(得分:0)
这不是一个错误,它是自动布局的结果。使用自动布局时,不应设置任何帧。相反,您应该通过修改约束来更改大小或位置。发生的事情是,无论何时需要重绘视图,帧都会恢复到由约束定义的帧。
答案 1 :(得分:0)
如果项目启用了自动布局,那么YES,您正在进行自动布局。您有两个选择,子类UIButton,以便您可以覆盖内在大小计算,或修改约束,以便在任何约束中不使用内在大小。如果你执行后者,那么你可能想要为宽度的约束创建一个IBOutlet,这样你就可以根据需要调整constant
属性。