有时应用会缩小 UITabBar 的宽度,屏幕截图中的 4 个图标通常分布在整个宽度上。
有没有人遇到过这种情况并且知道为什么会发生或者更好地解决/避免这种情况?我认为它开始发生在 Swift 上,所以也许他们的另一个很棒的优化?
也不确定如何重现它,大约每周发生两次,可能是旋转、segue 或应用程序切换。
此屏幕截图来自纵向模式下的 iPhone6,但在其他设备上也会出现。
最佳答案
我在两种情况下发现了 iOS9 上的相同行为:
1) 在 UINavigationController
弹出导航期间立即旋转;
2) 在观看全屏视频播放器时从横向到纵向旋转,然后关闭播放器。
要解决 iOS8+ 上的问题,您应该继承 UITabBarController
并从 UIContentContainer
协议(protocol)实现方法,如下所示:
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
if (!self.tabBar.window) return;
[coordinator animateAlongsideTransition: ^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
CGRect newBounds = self.tabBar.bounds;
newBounds.size.width = size.width;
self.tabBar.bounds = newBounds;
[self.view.superview setNeedsLayout];
}
completion: nil];
}
如果您不编写 return
字符串,您将无法解决第二个问题。
在 Swift 中添加相同的内容:
extension UITabBarController {
public override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
if let _ = self.tabBar.window {
coordinator.animateAlongsideTransition( { (context) in
self.tabBar.bounds.size.width = size.width
self.view.superview?.setNeedsLayout()
}, completion: nil)
}
}
}
关于ios - UITabBar 的怪异帧计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36435451/