ios – 使用Autolayout设置UIButton titleEdgeInsets和imageEdgeInsets很慢

ios – 使用Autolayout设置UIButton titleEdgeInsets和imageEdgeInsets很慢,第1张

概述我有一个视图与几个按钮,各种大小.他们都有一个标题和一个形象.我想把图像放在顶部,底部的标题居中.以下代码可以正常工作: - (void)centerAlignImageAndTextForButton:(UIButton*)button{ CGFloat spacing = 5; CGSize imageSize = button.imageView.frame.size; 我有一个视图与几个按钮,各种大小.他们都有一个标题和一个形象.我想把图像放在顶部,底部的标题居中.以下代码可以正常工作:
- (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),-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文件,而不是重复每个语言的整个故事板).所以对于我来说,似乎以编程方式设置插图是要走的路,但其造成的滞后并不是真的可以接受的.

有什么想法可以如何解决?

解决方法 将所有来自vIEwDIDLoad的centeralignImageAndTextForbutton调用移动到vIEwDIDLayoutSubvIEws,减少从先前的283毫秒到18毫秒的加载时间(vIEwDIDLoad为1毫秒,vIEwDIDLayoutSubvIEws为17毫秒).

然而,我有点困惑,为什么这么昂贵的设置这些insets从vIEwDIDLoad …

总结

以上是内存溢出为你收集整理的ios – 使用Autolayout设置UIButton titleEdgeInsets和imageEdgeInsets很慢全部内容,希望文章能够帮你解决ios – 使用Autolayout设置UIButton titleEdgeInsets和imageEdgeInsets很慢所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1113445.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存