我有一個按鈕,不同大小的視圖。他們都有一個標題和一個圖像。我想把圖像放在最上面,標題在底部,居中。這工作得很好用下面的代碼:設置UIButton titleEdgeInsets和imageEdgeInsets與Autolayout的速度很慢
- (void)centerAlignImageAndTextForButton:(UIButton*)button
{
CGFloat spacing = 5;
CGSize imageSize = button.imageView.frame.size;
button.titleEdgeInsets = UIEdgeInsetsMake(0, -imageSize.width, -(imageSize.height + spacing), 0);
CGSize titleSize = button.titleLabel.frame.size;
button.imageEdgeInsets = UIEdgeInsetsMake(-(titleSize.height + spacing), 0, 0, -titleSize.width);
}
不過,我在進入這個觀點之前看到一個小停頓。時間簡檔在儀器顯示,這在viewDidLoad中花99%的時間是通過調用我的方法的按鈕引起的:
283.0ms -[XViewController viewDidLoad]
282.0ms -[XViewController centerAlignImageAndTextForButton:]
141.0ms -[UIButton imageView]
98.0ms -[UIView(Hierarchy) layoutBelowIfNeeded]
141.0ms -[UIButton titleLabel]
103.0ms -[UIView(Hierarchy) layoutBelowIfNeeded]
各種佈局相關的東西被稱爲內[UIView(Hierarchy) layoutBelowIfNeeded]
,像[UIView(AdditionalLayoutSupport) recursiveLayoutEngineDidChange]
或[NSLayoutConstraint addToEngine]
。我知道可以在Interface Builder中設置這些插入符號,但這不僅僅是一項繁瑣的工作(需要「猜測」文本的寬度)。該應用程序也將本地化,因此適用於一種語言的插頁不會用於其他文本大小不同的另一種插頁(我正在使用故事板的基本本地化和.strings文件,而不是爲每種語言重複整個故事板)。所以對我來說,似乎以編程方式設置插頁是要走的路,但它造成的滯後並不是真的可以接受。
任何想法如何解決?
你爲什麼不在'layoutSubViews'上設置它們? – orkoden 2016-01-28 15:29:49