我有一个带圆形视图的超级视图和一个holderview,该视图包含3个标签作为子视图,并居中于该超级视图,如图中所示


我为3个标签添加了关于holderview的约束,也为holderview添加了关于superview的约束

NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(titleLabel);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-[titleLabel]-|"
                                        options:0
                                        metrics:nil
                                          views:viewsDictionary];

[holderView addConstraints:constraints];


viewsDictionary = NSDictionaryOfVariableBindings(setLabel);
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-[setLabel]-|"
                                        options: 0
                                        metrics:nil
                                          views:viewsDictionary];

[holderView addConstraints:constraints];


viewsDictionary = NSDictionaryOfVariableBindings(repLabel);
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-[repLabel]-|"
                                        options:0
                                        metrics:nil
                                          views:viewsDictionary];

[holderView addConstraints:constraints];

viewsDictionary = NSDictionaryOfVariableBindings(titleLabel, setLabel, repLabel);
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[titleLabel]-0-[setLabel]-0-[repLabel]-|"
                                        options:0
                                        metrics:nil
                                          views:viewsDictionary];

[holderView addConstraints:constraints];


NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(_labelView);
    NSArray *constraints =[NSLayoutConstraint constraintsWithVisualFormat:@"|-[_labelView]-|"
                                                                  options:0
                                                                  metrics:nil
                                                                    views:viewsDictionary];
    [self addConstraints:constraints];


应用程式中有一项功能,圆会缩小。我希望holderview及其子视图动态缩小。添加约束可用于holderview,但子视图会错位。




为了缩小,我随着superview框架的变化来更新holderview的框架大小。

谁能指出错误并指导我采取适当的解决方案?

最佳答案

使用自动布局和更改框架属性会使事情搞砸。

对要更改或设置动画的约束条件创建oultest

__weak IBOutlet UIView *settingsView;
__weak IBOutlet NSLayoutConstraint *settingsBottomConstraint;
__weak IBOutlet NSLayoutConstraint *settingsViewHeightConstraint;


更新约束(永远不要框架!)

settingsBottomConstraint.constant = - settingsViewHeightConstraint.constant;
[settingsView setNeedsUpdateConstraints];
[settingsView layoutIfNeeded];
isSettingsHidden = YES;


最近,我使用自动版面设计处理了视图动画,您可以在此处找到答案
Auto Layout constraint change does not animate

10-08 05:59