以编程方式自动布局和 UIImageView
Autolayout programmatically and UIImageView
我正在尝试在代码中布置一些视图。在运行时,我需要检查我们有多少交易,然后适当地布局代码。我有一个 UILabel 和一个 UIImageView。
我创建对象如下:
UILabel *numberOfDealsLabel = [UILabel new];
[numberOfDealsLabel setFont:[UIFont fontWithName:@"HelveticaNeue-CondensedBold" size:50]];
numberOfDealsLabel.translatesAutoresizingMaskIntoConstraints = NO;
numberOfDealsLabel.textColor = [UIColor whiteColor];
[numberOfDealsLabel setTextAlignment:NSTextAlignmentCenter];
numberOfDealsLabel.numberOfLines = 1;
numberOfDealsLabel.text = [NSString stringWithFormat:@"%d", 2];
[numberOfDealsLabel sizeToFit];
numberOfDealsLabel.preferredMaxLayoutWidth = view.frame.size.width;
[view addSubview:numberOfDealsLabel];
UIImageView *dealsImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"deal"]];
[view addSubview:dealsImage];
视图只是一个正方形。从这里开始,我尝试添加以下约束,以便两个视图都紧贴视图顶部并水平共享 space。
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[numberOfDealsLabel][dealsImage]|" options:nil metrics:nil views:views]];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[numberOfDealsLabel]|" options:nil metrics:nil views:views]];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[dealsImage]|" options:nil metrics:nil views:views]];
我收到以下错误:
下表中至少有一个约束可能是您不想要的。试试这个:(1)查看每个约束并尝试找出您不期望的; (2) 找到添加了不需要的约束或约束的代码并修复它。 (注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 的文档 属性 translatesAutoresizingMaskIntoConstraints)
此错误是由以下约束引起的:
[查看addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[numberOfDealsLabel][dealsImage]|" options:nil metrics:nil views:views]];
我不明白为什么这会导致问题。我的第一个想法是因为 UILabel 太大,加上图像的大小导致了问题。但是我将文字大小更改为非常小的数字,我仍然遇到同样的问题。
任何关于可能导致此问题的建议都很好。
看起来,您没有在 UIIamgeView 上调用 "translatesAutoresizingMaskIntoConstraints = NO",如果不能解决整个问题,这应该至少有一点帮助
所以,如果我是你,我会做的第一件事是:
UIImageView *dealsImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"deal"]];
[dealsImage setTranslatesAutoresizingMaskIntoConstraints:FALSE]; //this is new code
[view addSubview:dealsImage];
来自苹果:
For views that are aware of Auto Layout, in most circumstances you
want translatesAutoresizingMaskIntoConstraints to be NO.
我正在尝试在代码中布置一些视图。在运行时,我需要检查我们有多少交易,然后适当地布局代码。我有一个 UILabel 和一个 UIImageView。
我创建对象如下:
UILabel *numberOfDealsLabel = [UILabel new];
[numberOfDealsLabel setFont:[UIFont fontWithName:@"HelveticaNeue-CondensedBold" size:50]];
numberOfDealsLabel.translatesAutoresizingMaskIntoConstraints = NO;
numberOfDealsLabel.textColor = [UIColor whiteColor];
[numberOfDealsLabel setTextAlignment:NSTextAlignmentCenter];
numberOfDealsLabel.numberOfLines = 1;
numberOfDealsLabel.text = [NSString stringWithFormat:@"%d", 2];
[numberOfDealsLabel sizeToFit];
numberOfDealsLabel.preferredMaxLayoutWidth = view.frame.size.width;
[view addSubview:numberOfDealsLabel];
UIImageView *dealsImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"deal"]];
[view addSubview:dealsImage];
视图只是一个正方形。从这里开始,我尝试添加以下约束,以便两个视图都紧贴视图顶部并水平共享 space。
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[numberOfDealsLabel][dealsImage]|" options:nil metrics:nil views:views]];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[numberOfDealsLabel]|" options:nil metrics:nil views:views]];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[dealsImage]|" options:nil metrics:nil views:views]];
我收到以下错误:
下表中至少有一个约束可能是您不想要的。试试这个:(1)查看每个约束并尝试找出您不期望的; (2) 找到添加了不需要的约束或约束的代码并修复它。 (注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 的文档 属性 translatesAutoresizingMaskIntoConstraints)
此错误是由以下约束引起的:
[查看addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[numberOfDealsLabel][dealsImage]|" options:nil metrics:nil views:views]];
我不明白为什么这会导致问题。我的第一个想法是因为 UILabel 太大,加上图像的大小导致了问题。但是我将文字大小更改为非常小的数字,我仍然遇到同样的问题。
任何关于可能导致此问题的建议都很好。
看起来,您没有在 UIIamgeView 上调用 "translatesAutoresizingMaskIntoConstraints = NO",如果不能解决整个问题,这应该至少有一点帮助
所以,如果我是你,我会做的第一件事是:
UIImageView *dealsImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"deal"]];
[dealsImage setTranslatesAutoresizingMaskIntoConstraints:FALSE]; //this is new code
[view addSubview:dealsImage];
来自苹果:
For views that are aware of Auto Layout, in most circumstances you want translatesAutoresizingMaskIntoConstraints to be NO.