我有一个按钮,不同大小的视图。他们都有一个标题和一个图像。我想把图像放在最上面,标题在底部,居中。这工作得很好用下面的代码:设置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