gpt4 book ai didi

objective-c - 我如何从 viewWillTransitionToSize 获取有关 View Controller 在旋转后的外观的详细信息?

转载 作者:搜寻专家 更新时间:2023-11-01 05:43:21 27 4
gpt4 key购买 nike

viewWillTransitionToSize 为我们提供了一个大小和一个 transitionCoordinator。如果我的 View 即将旋转,我想找出哪些特定元素将在旋转后进行旋转,以便我可以在旋转前调整值以适合新的旋转尺寸。

我能否从 transitionCoordinator 获得对旋转 View Controller 的引用?我知道它有 viewControllerForKey: 但我不知道 key 是什么。

它传递的大小只是 viewController.view 的大小,这不够有用。我需要能够询问旋转后标签的尺寸。

最佳答案

我假设您使用的是自动布局或其他让了解 UI 元素的最终大小变得非常重要的东西。

我不相信你的 View 在调用 viewWillTransitionToSize 时调整了大小,所以没有发生布局。

您需要做的是自己强制调整大小,测量 UI 元素,然后将 View 调整回其原始大小(以便它可以在旋转时动画到新的大小)。

在这种情况下,假设您想了解一个名为 _myLabelUILabel:

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
// _myLabel is the label we want to measure
// This prints out its size pre-rotation:

NSLog(@"Label size: %f, %f", _myLabel.bounds.size.width, _myLabel.bounds.size.height);

CGRect oldFrame = self.view.frame;

//Force this view controller's view to take on the
// new size and re-layout immediately

self.view.frame = CGRectMake(0, 0, size.width, size.height);
[self.view setNeedsUpdateConstraints];
[self.view setNeedsLayout];
[self.view updateConstraintsIfNeeded];
[self.view layoutIfNeeded];

// _myLabel's size will now be the value it would take on post-rotation:

NSLog(@"Label size (after rotation): %f, %f", _myLabel.bounds.size.width, _myLabel.bounds.size.height);

//Restore the view so it can animate into the new size normally

self.view.frame = oldFrame;
[self.view setNeedsUpdateConstraints];
[self.view setNeedsLayout];
[self.view updateConstraintsIfNeeded];
[self.view layoutIfNeeded];
}

对于您的问题,这是一个非常严厉的解决方案。如果您能想出一种方法来独立计算您需要测量的内容的布局,那就更好了(尽管我知道这可能太复杂了)。

关于objective-c - 我如何从 viewWillTransitionToSize 获取有关 View Controller 在旋转后的外观的详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24460932/

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