アプリを Autoresize から Autolayout メカニズムに移行できませんでした。必要なのは、スーパービューと同じサイズで左上隅に接続される動的サイズとサブビューを持つビューだけです。IB では、PieView (私のスーパービュー) のサイズを 186x186 に設定しました。IB に必要なすべての制約を生成させます (コードで新しい制約を作成します)。
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:0xa2795d0 'IB auto generated at build time with view with fixed frame' V:[UIImageView:0x8a37150(186)]> NSLayoutConstraint:0xa0305c0 V:[UIImageView: 0x8a37150
(100)]
2 番目の imageView :
同じもの
PieView の場合:
( NSLayoutConstraint:0x8a40750 V:[CEPieView:0x8a36e50(100)]、NSLayoutConstraint:0xa030570 V:|-(0)-[UIImageView:0x8a37150] (名前: '|':CEPieView:0x8a36e50)、NSLayoutViewConstraint:0xa0305c0 V:[UI :0x8a37150(100)]、NSLayoutConstraint:0xa0305f0 V:[UIImageView:0x8a37150]-(0)-[UIImageView:0xa277cf0]> NSLayoutConstraint:0xa030620 V:[UIImageView:0xa277cf0(100)]、NSLayoutConstraint[UIImageView:0xa030650 V: 0xa277cf0]-(0)-| (名前: '|':CEPieView:0x8a36e50 ) )
よろしければ、直し方を教えてください。AutoLayout メカニズムを使用して古い自動サイズ変更マスク (UIViewAutoresizingFlexibleHeight、UIViewAutoresizingFlexibleWidth) を作成する方法。どんな助けでも大歓迎です。