作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
viewWillTransitionToSize
为我们提供了一个大小和一个 transitionCoordinator。如果我的 View 即将旋转,我想找出哪些特定元素将在旋转后进行旋转,以便我可以在旋转前调整值以适合新的旋转尺寸。
我能否从 transitionCoordinator 获得对旋转 View Controller 的引用?我知道它有 viewControllerForKey:
但我不知道 key 是什么。
它传递的大小只是 viewController.view
的大小,这不够有用。我需要能够询问旋转后标签的尺寸。
最佳答案
我假设您使用的是自动布局或其他让了解 UI 元素的最终大小变得非常重要的东西。
我不相信你的 View 在调用 viewWillTransitionToSize
时调整了大小,所以没有发生布局。
您需要做的是自己强制调整大小,测量 UI 元素,然后将 View 调整回其原始大小(以便它可以在旋转时动画到新的大小)。
在这种情况下,假设您想了解一个名为 _myLabel
的 UILabel
:
- (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/
我是一名优秀的程序员,十分优秀!