2014-03-03 107 views
1

我一直在用UIImageView设置约束后,用手机摄像头的图像初始化它有一些麻烦。如果我运行代码如下:UIImageView和自动布局

UITextView *textView = self.textView; 
UIImageView *imageView = [[UIImageView alloc] initWithImage:self.item.accessoryImage]; 
UILabel *label = self.textLabel; 

self.accessoryImageView = imageView; 
[self.contentView addSubview:self.accessoryImageView]; 

[self.contentView removeConstraints:self.contentView.constraints]; 
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[textView]-2-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(textView, label)]]; 
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-100-[textView]-2-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(textView, label)]]; 
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[imageView(==100)]-10-[textView]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(imageView,textView)]]; 

自动布局决定打破ImageView的(== 100)约束和尺寸而不是所述的ImageView帧为2000+点宽,这是图像的尺寸相同。有没有人知道解决这种情况的方法?

+0

'imageView(== 100)'代表什么?如果你想设置一个固定宽度,为什么不使用'imageView(100)'? '== view'用于设置两个视图之间的维度相等,例如'[按钮1(== BUTTON2)]'。也许autolayout系统将'100'视为标识符? – vokilam

回答

1

通过调用[self.accessoryImageView setTranslatesAutoresizingMaskIntoConstraints:NO],确保图像视图不会将其自动调整掩码转换为约束。如果设置为YES(默认情况下),它将使用内在内容大小(图像的大小)来生成大小限制。如果将其设置为NO,则不会发生。

0

你可是具体该行:

[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[imageView(==100)]-10-[textView]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(imageView,textView)]]; 

我认为你需要给这样的格式:

@"V:[imageView(==100)]-10-[textView]" 

@"H:[imageView(==100)]-10-[textView]" 

自动布局需要推断哪个方向是需要的约束。如果你看看你的控制台,它可能抱怨缺少布局(因为它似乎不明确)。

另外斯科特回答是正确的,你可以告诉你的UIImageView不要混淆约束。

+2

假设H不存在。 – jrturton