【发布时间】:2015-02-01 03:42:00
【问题描述】:
我有一个动态的按钮设置,可以根据故事板中设置的自动布局约束自动调整宽度和高度。在纵向时,按钮具有相同的宽度和高度,因此框架是完美的方形,而当设备旋转为横向时,按钮会变得更短和更宽。我在按钮的图层上设置了cornerRadius,因此它们在纵向时是完美的圆形并且效果很好,但是当我旋转到横向时,角半径显然不再正确。我需要改变它,使它变成一个椭圆形。问题是,无论我尝试将该代码放在哪里,我都无法获得旋转发生后按钮的正确宽度和高度。我希望在设备旋转时发生这种情况 - 不想等到旋转完成。理想情况下,cornerRadius 会在转换动画的同时动画变化。
如果我使用viewWillLayoutSubviews 或viewDidLayoutSubviews,它会在启动应用程序时正确获取按钮框架,但在旋转到横向时,会在按钮框架更新为新方向之前调用此方法,所以我可以' t 计算正确的圆角半径。
如果我使用viewWillTransitionToSize:withTransitionCoordinator: 或willTransitionToTraitCollection:withTransitionCoordinator: 或willRotateToInterfaceOrientation,则在启动应用程序时不会调用它,并且在旋转设备时会在框架更新为新尺寸之前调用它。
如果我使用willAnimateRotationToInterfaceOrientation,则在启动应用程序时不会调用它,但在旋转设备时它会正确获取新的按钮框架。但这种方法已被弃用。
那么问题来了,你可以使用什么方法来根据按钮在旋转完成时的大小来设置按钮的属性,即在旋转完成之前调用?
请注意,每次方向更改都需要调用它,而不仅仅是尺寸等级更改(旋转 iPad 不会更改尺寸等级)。我只需要支持iOS 8.0+。
这是我在方法中放置的代码,以了解其大小是否正确:
println("\(button.frame.size.width) x \(button.frame.size.height)")
【问题讨论】:
标签: ios swift ios8 screen-rotation size-classes