gpt4 book ai didi

ios - iOS 8 和之前版本中自动旋转的区别

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:03:38 24 4
gpt4 key购买 nike

这个问题是在我制作以编程方式创建的 View Controller 时出现的。该 Controller 应该支持任何界面方向。根据良好的实践,我在 -viewDidLoad 上创建 subview 并在 -viewWillLayoutSubviews 上设置它们的框架。这种方法很好,因为 -viewWillLayoutSubviews 不仅在开始时布局您的 subview ,而且还处理界面旋转和 View Controller View 的其他更改。

在 iOS 8 上一切正常,但是当我在 iOS 6 和 7 上运行应用程序时,布局被破坏了。我发现原因是布局基于 self.view.frame 属性。如果您尝试在不同 iOS 版本的 -viewWillLayoutSubviews 上打印框架,当设备处于横向模式时,您将得到不同的结果。

- (void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
NSLog(@"%@", NSStringFromCGRect(self.view.frame));
}

iOS 8 上的输出(将设备切换为横向模式后):

2014-10-07 17:35:11.028 BlaBlaApp[361:12587] {{0, 0}, {568, 320}}

iOS 7 和 6 上的输出(相同的设备方向):

2014-10-07 17:35:11.028 BlaBlaApp[361:12587] {{0, 0}, {320, 568}}

在 iOS 7 和 6 上,当设备方向改变时, View 框架不会改变。但显然对我来说, View 的可见区域发生了变化!我决定调查界面旋转的实际工作原理...

最佳答案

在 iOS 7 和 6 上,通过更改其 transform 属性(frame 不变)来旋转 View 。在 iOS 8 上, View Controller View 的 transform 属性始终等于 CGAffineTransformIdentity 并且 frame 根据方向发生变化。

我设法用一串代码(没有宏和 if 语句)解决了我的问题:

CGRect actualFrame = CGRectApplyAffineTransform(self.view.frame, self.view.transform);

subview 可以在任何 iOS 版本上以类似的方式根据 actualFrame 定位。

关于ios - iOS 8 和之前版本中自动旋转的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26239027/

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