我的應用從Autoresize遷移到Autolayout機制失敗。我需要的只是一個動態尺寸和子視圖的視圖,它們將與左上角相連,並與其超級視圖的大小相同。在IB中,我將PieView(我的超級視圖)的大小設置爲186x186。而讓IB生成所有需要的約束(我會在代碼中創建新的): 在Autolayout可視化表單中調整子視圖
PieView.m -updateConstraints()
- (void)updateConstraints {
[super updateConstraints];
[self removeConstraintsAffectingViewAndSubviews];
[self setTranslatesAutoresizingMaskIntoConstraints:NO];
CGFloat sizeCoef = 0.7f;
CGFloat percent = [self.category getFillinPercent]/100.0f;
percent = percent > 1.0f ? 1.0f : percent;
sizeCoef += (1.0f - sizeCoef) * percent;
NSLayoutConstraint *width = [NSLayoutConstraint constraintWithItem:self
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0f
constant:100.f];//kDiameter * sizeCoef];
NSLayoutConstraint *height = [NSLayoutConstraint constraintWithItem:self
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0f
constant:100.0f];//kDiameter * sizeCoef];
//_imgEmptyCircle, _imgFullCircle - UIImageViews
NSDictionary *views = NSDictionaryOfVariableBindings(_imgEmptyCircle, _imgFullCircle, self);
NSDictionary *metrics = @{@"height":@100.0};
[self addConstraints:@[width, height]];
NSString *visualForm = @"H:|[_imgEmptyCircle(height)][_imgFullCircle(height)]|";
NSArray *horizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:visualForm
options:0
metrics:metrics
views:views];
visualForm = @"V:|[_imgEmptyCircle(height)][_imgFullCircle(height)]|";
NSArray *verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:visualForm
options:0
metrics:metrics
views:views];
[self addConstraints:verticalConstraints];
[self addConstraints:horizontalConstraints];
}
結果真的出乎我的意料。藍色的顯示正確,但我想要,但綠色的有奇怪的行爲。
關我當然有錯誤:無法同時滿足的約束。
首先ImageView的:
NSIBPrototypingLayoutConstraint:[UIImageView的:0x8a37150(186)]>
NSLayoutConstraint:0xa0305c0五:[UIImageView的:V 0xa2795d0 '在生成時生成用於考慮到與固定框架IB自動' 0x8a37150(100) ]
二ImageView的:
的同一個
可能爲PieView:
( NSLayoutConstraint:0x8a40750五:[CEPieView:0x8a36e50(100)], NSLayoutConstraint:0xa030570五:| - (O) - [UIImageView:0x8a37150](名稱S: '|':CEPieView:0x8a36e50) NSLayoutConstraint:0xa0305c0五:[UIImageView的:0x8a37150(100)], NSLayoutConstraint:0xa0305f0五:[UIImageView的:0x8a37150] - (O) - [的UIImageView:0xa277cf0]> NSLayoutConstraint :0xa030620 V:[UIImageView:0xa277cf0(100)], NSLayoutConstraint:0xa030650 V:[UIImageView:0xa277cf0] - (0) - | (姓名:'|':CEPieView:0x8a36e50) )
請給我一個建議如何解決它。如何在AutoLayout機制的幫助下創建和舊的自動調整掩碼(UIViewAutoresizingFlexibleHeight,UIViewAutoresizingFlexibleWidth)。任何幫助將不勝感激。
你能解釋一下哪一個是綠色的視圖,哪一個是藍色的看法?你的視圖層次結構如何設置? – axelcdv
PieView有3個子視圖。其中之一,最後一個,現在不使用,在討論中是多餘的。第一個imageView具有藍色背景,第二個(在IB中間)具有綠色背景。謝謝,回覆 –