Ios6 自动布局适用于UIView,但不适用于UILabel。为什么?

Ios6 自动布局适用于UIView,但不适用于UILabel。为什么?,ios6,autolayout,Ios6,Autolayout,所需场景:通过iOS6的AutoLayout vs Frames创建自定义警报视图: 1) 在主机视图(UIController.view)上创建空UIView: 这是有效的:我在主机视图(子视图)上看到我的警报UIView 但是,正在尝试将UILabel添加到警报视图中。 看到UIView(1)已绘制,我只是将UILabel替换为它,看看是否可以得到一些东西: - (UILabel *)createLabelWithMessage:(NSString *)message { if

所需场景:通过iOS6的AutoLayout vs Frames创建自定义警报视图:

1) 在主机视图(UIController.view)上创建空UIView:

这是有效的:我在主机视图(子视图)上看到我的警报UIView


但是,正在尝试将UILabel添加到警报视图中。

看到UIView(1)已绘制,我只是将UILabel替换为它,看看是否可以得到一些东西:

- (UILabel *)createLabelWithMessage:(NSString *)message {
    if (!message) return nil;
    UILabel *myLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 0,0)];
    myLabel.text = message;
    [myLabel setFont:[UIFont systemFontOfSize:12.0]];
    [myLabel setAutoresizingMask:UIViewAutoresizingNone]; 
    myLabel.backgroundColor = [UIColor clearColor];
    return myLabel;
}
...
titleLabel = [self createLabelWithMessage:@"Danger"];
...
// ...replacing 'alertView' (UIView) with 'titleView' (UILabel):
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[titleLabel(==300)]" options:0  metrics:nil views:viewsDict]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[titleLabel]-|" options:0  metrics:nil views:viewsDict]];
问题:为什么UILabel会爆炸,但UIView看起来画图正常?

下面是来自Xcode的提示:

自动布局约束[3828:11303]无法同时满足 限制条件。

可能至少有一个约束在 下面的列表是您不想要的。试试这个: (1) 看看每一个 约束并试图找出你不期望的; (2) 找到 添加一个或多个不需要的约束并修复它的代码。
(注意:如果您看到NSAutoresizingMaskLayoutConstraints 不理解,请参阅UIView属性的文档 翻译自动调整大小(从皮肤到肌肉)( "", "", “”)

将尝试通过打破约束进行恢复 (名称:“|”:UIView:0x128727a0)>

UILabel中一定有一个隐藏属性,它破坏了我的“视觉格式”语言。 ..我创建了“alertView”的另一个子视图;我得到了同样的错误。所以很明显,当我只在UIController视图的(子视图)上显示一(1)个UIView(“alertView”)时,我只得到了一个“好”结果;没别的了


隐藏的东西与简单约束相冲突。我不知道是什么

顺便说一句:我正在使用NIB作为主机UIView,并启用“使用自动布局”。 但是,我将在更大的代码中使用它,而不使用“自动布局”(iOS 4.3+),在
iOS6检查例程。

解决方案:(根据我的评论)我没有将特定子视图的“SetTranslatesAutoResizezingMacSkinToConstraints”标志设置为“否”;尽管我这样做是为了它的超级容器。
示例:
[testView SetTranslatesAutoResizengMaskintoConstraints:否];
不要忘记对所有成员UIView使用“SetTranslatesAutoResizingMacSkinToConstraints”

解决方案:(根据我的评论)我没有将特定子视图的“SetTranslatesAutoResizezingMacSkinToConstraints”标志设置为“否”;尽管我这样做是为了它的超级容器。
示例:
[testView SetTranslatesAutoResizengMaskintoConstraints:否]; 不要忘记对所有成员UIView使用“SetTranslatesAutoResizingMacSkinToConstraints”

解决方案:许多视图中有一个碰巧被自动调整了大小。因此,我只做了以下工作:[testView setTranslatesAutoresizingMaskIntoConstraints:NO];记住为所有成员视图设置掩码为否!解决方案:许多视图中有一个碰巧被自动调整了大小。因此,我只做了以下工作:[testView setTranslatesAutoresizingMaskIntoConstraints:NO];记住为所有成员视图设置掩码为否!
- (UILabel *)createLabelWithMessage:(NSString *)message {
    if (!message) return nil;
    UILabel *myLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 0,0)];
    myLabel.text = message;
    [myLabel setFont:[UIFont systemFontOfSize:12.0]];
    [myLabel setAutoresizingMask:UIViewAutoresizingNone]; 
    myLabel.backgroundColor = [UIColor clearColor];
    return myLabel;
}
...
titleLabel = [self createLabelWithMessage:@"Danger"];
...
// ...replacing 'alertView' (UIView) with 'titleView' (UILabel):
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[titleLabel(==300)]" options:0  metrics:nil views:viewsDict]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[titleLabel]-|" options:0  metrics:nil views:viewsDict]];