美文网首页
IOS自动布局,代码获取动态布局控件尺寸

IOS自动布局,代码获取动态布局控件尺寸

作者: 易书乂轩羽 | 来源:发表于2017-05-09 11:04 被阅读547次

在IOS开发过程中,会经常使用自动布局和代码共同实现功能展示。自动布局会根据IOS设备类型,屏幕大小进行控件尺寸的动态调整来完成应用的屏幕适配,那么如何在代码中获取当前控件具体尺寸呢?

应用场景:比如我们的应用要求根据不同的业务场景,动态调整界面展示的内容,导致在不同条件下需要在同一个UIView中加入不同类型的子View。那么如何保证子View可以根据父View尺寸来进行自动调整呢?自然需要知道当前父View的尺寸,子View可以根据尺寸类设计,那么如何获取父View的尺寸呢?何时获取尺寸才合适?

UIViewController生命周期:

(void)loadView

(void)viewDidLoad

(void)viewWillAppear

(void)viewWillLayoutSubviews

(void)viewDidLayoutSubviews

(void)viewDidAppear

(void)viewWillDisappear

(void)viewDidDisappear

其中loadView、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear,不需要在此叙述,他们的执行顺序和完成的内容可以参考UIViewController生命周期的各类文章,在此主要讨论的是其中另外两个常常被忽视的方法:viewWillLayoutSubviews、viewDidLayoutSubviews。

在介绍这两个方法之前,需要了解的是UIView中的layoutSubViews方法,这个方法是在UIView发生变化时(包括子view发生变化,自身尺寸调整等),重新调整子View的方法。对的,就是这个方法,这个方法会适应UIView的调整,我们可以在需要的时候对其内部的子View进行尺寸属性等的修改来满足新场景的需求。

同理,在UIViewController中,viewWillLayoutSubviews和viewDidLayoutSubviews是加载控制器子View时相关两个方法,类似viewWillAppear和viewDidAppear,viewWillLayoutSubviews是在加载子View之此前调用,viewDidLayoutSubviews是加载子View完毕后调用。也就是说,当控制器执行到viewDidLayoutSubviews时,所有的内部控件都已经加载完毕,意味着尺寸大小已经确定,此时的尺寸就是未来在屏幕中加载出来的View的尺寸,这就是我们想要的。

所以,在IOS开发中我们应该注意以下几个几点:1、不要把所有的初始化操作都安排在viewDidLoad中,应该根据具体的要求选择合适的加载时机;2、为布局做准备的操作可以在viewWillLayoutSubviews之前做,如决定子view的加载类型可以在viewDidLoad中进行判断,而在总体布局基础上上进行调整时需要在viewDidLayoutSubviews中操作(自动布局);3、不要在viewDidLoad等方法中进行耗时操作,会影影响界面的加载效率;

相关文章

网友评论

      本文标题:IOS自动布局,代码获取动态布局控件尺寸

      本文链接:https://www.haomeiwen.com/subject/wssbtxtx.html