gpt4 book ai didi

ios - 当设备方向改变时以编程方式更新约束的正确方法?

转载 作者:可可西里 更新时间:2023-11-01 03:18:27 26 4
gpt4 key购买 nike

我正在使用 storyboardautolayout,并在相应的 View Controller 中将 IB 中的约束设置为 IBOutlet。我正在阅读几篇关于如何更新约束以使其在纵向和横向中有所不同的帖子,但我仍然不确定我应该怎么做:

  1. 我应该在 -viewWillTransitionToSize:withTransitionCoordinator: 方法中还是在 updateViewConstraints 方法中设置新约束?
  2. 设置新约束后,我应该调用[self.view setNeedsUpdateConstraints];,还是layoutIfNeeded,或setNeedsLayout?<
  3. 我应该如何更新,例如某个约束的常量:

    self.myConstraint.constant = 30.0

或做:

[self.view removeConstraint:self.passwordViewHeight];

self.passwordViewHeight = [NSLayoutConstraint constraintWithItem:self.passwordView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:34.0];

[self.view addConstraint:self.passwordViewHeight];

提前致谢

最佳答案

使用 viewWillTransitionToSize 方法检测方向变化。当设备方向即将改变时,将调用此方法。

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator (id<UIViewControllerTransitionCoordinator>)coordinator{
//change constraints
}

或者,如果您想在方向更改后更改约束,请在 viewWillTransitionToSize 方法中使用协调器对象的 animateAlongsideTransition 方法。

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator{
[coordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
//change constraints
}];
}

关于ios - 当设备方向改变时以编程方式更新约束的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33597133/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com