UIView的intrinsicContentSize方法,在按钮中重写
场景,一个有图片有文字的按钮在其父控件上加了上左的约束,然后,有需要要调整按钮与图片之间的间距,第一想法就是设置title insets 的left。
然后问题出现了,这个按钮的文字居然显示不全了,也就是说在我们设置了title insets后,系统没有再次sizeToFit类似的约束 ,当然sizeToFit是用frame时的让其自动适应内容大小,在约束的情况下就得用约束了,但是又因为不同系统下的字号字体大小是不一样的,所以titleLabel的宽度也是不定的。
自定义一个button,重写
intrinsicContentSize
就可以了。在sb中设置title insets,然后就能跟sizeToFit一样的效果了。
- (CGSize) intrinsicContentSize { CGSize s = [super intrinsicContentSize]; // 这里我只加了左间距,其他的也就没有必要写出来了 CGFloat w = s.width + self.titleEdgeInsets.left; return CGSizeMake(w,s.height); }