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];
가}
결과는 정말 나를 놀라게했다. 청색은 원했던 것처럼 올바르게 표시되었지만 녹색은 이상하게 보입니다. 동시에 제약 조건을 충족 할 수 없습니다 :
꺼짐 물론 나는 오류가 있습니다.
먼저 이미지 뷰 :
NSIBPrototypingLayoutConstraint [있는 UIImageView : 0x8a37150 (186)]>
NSLayoutConstraint : 0xa0305c0 V :있는 UIImageView : V 0xa2795d0 '고정 프레임 뷰의 제작시에 발생 IB 자동'0x8a37150 (100) ]
두번째 이미지 뷰 :
동일한 PieView 대한 예상되는
하나
( NSLayoutConstraint : 0x8a40750 V : CEPieView : 0x8a36e50 (100)] NSLayoutConstraint : 0xa030570 V : | - (0) - [UIImageView : 0x8a37150] (이름 S '|'CEPieView : 0x8a36e50) NSLayoutConstraint : 0xa0305c0 V :있는 UIImageView : 0x8a37150 (100)] NSLayoutConstraint : 0xa0305f0 V :있는 UIImageView : 0x8a37150 - (0) - [있는 UIImageView : 0xa277cf0]> NSLayoutConstraint : 0xa030620 V : [UIImageView : 0xa277cf0 (100)], NSLayoutConstraint : 0xa030650 V : [UIImageView : 0xa277cf0] - (0) - | (이름 : '|': CEPieView : 0x8a36e50) )
제발 해결 방법을 알려주세요. AutoLayout 메커니즘을 사용하여 마스크 (UIViewAutoresizingFlexibleHeight, UIViewAutoresizingFlexibleWidth)를 만들고 자동 이전하는 방법 어떤 도움을 주시면 감사하겠습니다.
당신이 녹색이다 청색보기 어느 쪽이 어느 쪽이 설명 할 수 :
기본적으로 당신이로 끝날 것? 보기 계층 구조는 어떻게 설정됩니까? – axelcdv
PieView에는 3 개의 하위보기가 있습니다.그들 중 하나, 마지막 하나, 지금은 사용되지 않으며 중복 논의가 있습니다. 첫 번째 imageView는 파란색 배경을 가지고 두 번째 (IB 중간의) 녹색 배경을가집니다. 답장을 보내 주셔서 감사합니다. –