- (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很慢所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)