場景,一個有圖片有文字的按鈕在其父控件上加了上左的約束,然后,有需要要調整按鈕與圖片之間的間距,第一想法就是設置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); }