setFrame是最经典的方法,在iOS中没有给UI控件设置frame控件就不能显示,有时的确没有设置frame但就是显示了是因为有某些控件会自动计算和设置frame
首先,最简单的就是直接的使用initWithFrame:进行控件的初始化同时给frame属性赋值。这个方法用起来简便,适合于固定尺寸的简单控件,但是假若UITextField的字数行数不固定,需要从远程加载,这个方法就不好用了。
所以用的最多的还是setFrame方法,配合上计算控件size的方法使用效果更佳。
我个人喜欢使用给控件赋值的同时setFrame的方法,实现的技巧就是新建一个类来保存对应控件的数据模型以及控件frame,重写setModel,给控件赋值的时候同时给控件赋上frame。如果控件里面有子控件,子控件里还有子控件,这种情况也是很常见。举个例子
假设数据模型叫model
view有子控件subview1和subview2
子控件里面还有其他杂七杂八的子控件
这时候需要新建viewFrame、subview1Frame、subview2Frame类
viewFrame中有subview1Frame和subview2Frame成员,每个类中都包含model成员,
这时候重写这三个类的setModel方法,model传给viewFrame时候viewFrame传给两个subviewFrame,subviewFrame中计算并保存子控件大小,然后计算自身对应的subview的大小返回给viewFrame,viewFrame计算view的大小。
最后改写view的setViewFrame,对应subview改写setSubviewFrame方法,给view和subview以及subview里面的控件赋值和setFrame。