1、设置子视图的frame
布局子视图:使用该方法直接设置子视图的frame
- (void)layoutSubviews;
在iOS 5.1和更早版本上这个方法的默认实现没有任何作用。在以后版本,默认实现使用设置的任何约束来确定任何子视图的大小和位置。
该方法不可直接调用;如果想强制进行布局更新,那么在下一次绘图更新之前调用-setNeedsLayout
方法。如果想立即更新视图的布局,调用-layoutIfNeeded
方法。
2、下一次更新中重新布局子视图的frame
使该view
的当前布局无效并在下一次更新中重新布局。
- (void)setNeedsLayout;
需要在主线程调用该方法调整view
的子视图布局;该方法记录请求并立即返回。
由于此方法不强制立即更新,而是等待下一次更新周期,因此可以在更新任何视图之前使用它来使多个视图的布局无效。此行为允许将所有布局更新合并到一个更新周期,这通常会提高性能。
3、立即布局子视图的frame
如果布局更新未完成,立即布局子视图。
- (void)layoutIfNeeded;
使用此方法强制view
立即更新其布局。当使用自动布局时,布局引擎会根据需要更新视图的位置,以满足约束条件的变化。此方法将从当前view
开始布局视图子树。如果没有布局更新挂起,此方法将退出,而无需修改布局或调用任何与布图相关的回调。
4、是否依赖于基于约束的布局系统
指示当前view
是否依赖于基于约束的布局系统。
@property(class, nonatomic, readonly) BOOL requiresConstraintBasedLayout;
如果当前view
必须在基于约束布局的window
中使用才能正常工作,那么YES,否则NO。
如果自定义视图不能正确地使用自动调整布局,则应该重写此选项以返回YES。
5、是否被转换为自动布局约束
用于确定视图的autoresizing mask
是否被转换为自动布局约束。
@property(nonatomic) BOOL translatesAutoresizingMaskIntoConstraints;
如果此属性的值为YES,系统将创建一组约束,这些约束将复制视图的自动调整掩码指定的行为。这还允许使用视图的frame
,bounds
或center
属性修改视图的大小和位置,从而允许在自动布局中创建静态的基于frame的布局。
注意,autoresizing mask
约束完全指定了view
的size和position;因此,如果不想引发冲突,就不能添加额外的约束来修改这个size或position。如果想使用AutoLayout来动态计算视图的大小和位置,必须将此属性设置为NO,然后为视图提供一组不冲突的约束。
默认情况下,该属性设置为YES,用于通过代码创建的任何视图。如果在Interface Builder中添加视图,系统会自动将此属性设置为NO。
6、UITextField
设置清空按钮
当我们设置 UITextField
的清空按钮模式clearButtonMode
为UITextFieldViewModeWhileEditing
时,每当在输入框编辑文本,右侧就会出现一个清空按钮;这个按钮是UITextField
的私有变量_clearButton
,在创建UITextField
时并没有赋值,只有在编辑文本时,才会赋值!但是系统提供的按钮图标太丑陋,这时就需要我们利用 KVC 修改UITextField
的私有变量_clearButton
:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
UIButton *button = [textField valueForKey:@"_clearButton"];
if ([button isKindOfClass:[UIButton class]]) {
[button setImage:[UIImage imageNamed:@"clearImgae"] forState:UIControlStateNormal];
}
return YES;
}
网友评论