避免在任何地方放置setTranslatesAutoresizingMaskIntoConstraints(false)

时间:2014-12-27 14:07:43

标签: ios

我想知道,现在使用自动布局,您必须告诉每个UIView您不想将其(已弃用的)自动调整大小的蒙版转换为布局约束,如下所示:

let view = MyView()
view.setTranslatesAutoresizingMaskIntoConstraints(false)

在我的应用程序中,我(几乎)使用自定义约束执行所有视图,因此我从不想要自动调整自动调整大小的蒙版。如果默认设置为false,那会不会很好?因此,只有在我想要翻译自动调整大小掩码的情况下,我才将其设置为true

有没有办法让false成为setTranslatesAutoresizingMaskIntoConstraints的默认值?也许有某种聪明的扩展(a.k.a.类别)?

2 个答案:

答案 0 :(得分:3)

我完全同意这就是为什么我制作this category包含这样一个初始化者的原因:

extension UIView {

    // MARK: Initializing a View Object

    /**
    * @name Initializing a View Object
    */

    /**
    *  Returns a frameless view that does not automatically use autoresizing (for use in autolayouts).
    *
    *  @return A frameless view that does not automatically use autoresizing (for use in autolayouts).
    */
    class func autoLayoutView() -> Self {
        let view = self()
        view.setTranslatesAutoresizingMaskIntoConstraints(false)
        return view
    }
}

项目中也有一个快速的分支,但这是非常早期的阶段。拉请求欢迎!

答案 1 :(得分:1)

为什么UIView上没有类别?

头:

@interface UIView( MaskKiller )

- ( instancetype )myInit;

实施:

@implementation UIView( MaskKiller )

- ( instancetype )myInit
{
     if( self = [ self init ] )
     {
          self.translatesAutoresizingMaskIntoConstraints = NO;
     }
     return self;
}

编辑:这里有点快,当然在处理UIView子类时没有解决任何问题。在这种情况下,调整可能是一种选择。