美文网首页
OC之view手动布局视图

OC之view手动布局视图

作者: 苏沫离 | 来源:发表于2018-10-22 10:49 被阅读0次
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,系统将创建一组约束,这些约束将复制视图的自动调整掩码指定的行为。这还允许使用视图的frameboundscenter属性修改视图的大小和位置,从而允许在自动布局中创建静态的基于frame的布局。

注意,autoresizing mask约束完全指定了view的size和position;因此,如果不想引发冲突,就不能添加额外的约束来修改这个size或position。如果想使用AutoLayout来动态计算视图的大小和位置,必须将此属性设置为NO,然后为视图提供一组不冲突的约束。

默认情况下,该属性设置为YES,用于通过代码创建的任何视图。如果在Interface Builder中添加视图,系统会自动将此属性设置为NO。

6、UITextField 设置清空按钮

当我们设置 UITextField 的清空按钮模式clearButtonModeUITextFieldViewModeWhileEditing 时,每当在输入框编辑文本,右侧就会出现一个清空按钮;这个按钮是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;
}

相关文章

网友评论

      本文标题:OC之view手动布局视图

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