2014-03-03 85 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