更改UIButton状态时不更新内部大小

jve*_*ios 10 iphone objective-c interface-builder uikit ios

我有一个包含UIButton的UIView.UIButton为UIControlStateNormal("Follow")和UIControlStateSelected("Following")状态设置了2个标题.我在UIButton上使用自动布局,它有一个约束,距离超视图的顶部一定距离,另一个距离超视图的左侧有一定距离.我也使用了"尺寸适合内容".

当我从代码中将按钮设置为处于选定状态时,标题会正确更改,但UIButton的固有宽度不会更改,因此当从"Follow"更改为"Follow"时,文本将被椭圆化.

self.selected = self.following;
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述在此输入图像描述

当我以不同的方式处理问题时,只需在有人点击按钮时更改UIControlStateNormal的文本,该按钮就会正确地改变大小.

NSString *title = (self.following) ? @"Following" : @"Follow"
[self setTitle:title forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述在此输入图像描述

这是UIKit中的一个错误吗?我希望按钮可以更改其内在大小,以便在状态发生变化时正确反映文本的新大小,特别是因为除了2按钮状态的文本之外还有其他我想要更改的内容.

小智 23

就像David Caunt在评论中指出的那样,调用invalidateIntrinsicContentSize会导致autolayout调整按钮的大小以适应它的新内容.

self.selected = self.following;
[self invalidateIntrinsicContentSize];
Run Code Online (Sandbox Code Playgroud)

PS.大卫,如果你想发布你的commant作为答案我会删除我的.