有时应用会缩小UITabBar的宽度,屏幕截图中的4个图标通常分布在整个宽度上。
是否有人遇到这种情况并知道为什么会发生这种情况,甚至更好地解决/避免它?我认为它开始发生在Swift上,所以可能是他们的另一个非常棒的优化?
也不确定如何重现它,每周发生两次,可能是旋转,segue或app切换。
此屏幕截图来自iPhone6的纵向模式,但也会在其他设备上发生。
答案 0 :(得分:2)
我在两种情况下在iOS9上发现了相同的行为:
1)在UINavigationController
;
2)在观看全屏视频播放器并关闭播放器之后,从横向旋转到纵向。
要解决iOS8 +上的问题,您应该继承UITabBarController
并从UIContentContainer
协议实现方法,如下所示:
- (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)
}
}
}