iOS 13 UITabBar 重新定位到顶部



我已经按照这个答案将我的标签栏重新定位到页面顶部。在iOS 13发布之前,它一直运行良好。在iOS 13中,选项卡栏在屏幕底部可见。我应该使用任何其他解决方法吗?

有人遇到同样的问题吗?

更新:

以下是我在应用程序中使用的代码段:

- (void) viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
[self.tabBar invalidateIntrinsicContentSize];
// Just a quick fix for making this to happen for iOS versions between 11.0 to 11.1
// Updating the frame in Main queue.
dispatch_async(dispatch_get_main_queue(), ^{
[self changeTabBarPosition];
});
// Set the translucent property to NO then back to YES to
// force the UITabBar to reblur, otherwise part of the
// new frame will be completely transparent if we rotate
// from a landscape orientation to a portrait orientation.
self.tabBar.translucent = NO;
self.tabBar.translucent = YES;
}
- (void)changeTabBarPosition {
CGFloat tabSize = 44.0;
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if (UIInterfaceOrientationIsLandscape(orientation)) {
tabSize = 32.0;
}
CGRect tabFrame = self.tabBar.frame;
tabFrame.size.height = tabSize;
tabFrame.origin.y = [UIApplication sharedApplication].statusBarFrame.size.height;
self.tabBar.frame = tabFrame;
}

我在他/她的回答中提到的@Thanh Vu的帮助下找到了解决方案。下面的代码段解决了我的问题。

- (void) viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
[self.tabBar invalidateIntrinsicContentSize];
CGRect tabFrame = self.tabBar.frame;
tabFrame.size.height = 44.0;
tabFrame.origin.y = 0;
self.tabBar.frame = tabFrame;
// Set the translucent property to NO then back to YES to
// force the UITabBar to reblur, otherwise part of the
// new frame will be completely transparent if we rotate
// from a landscape orientation to a portrait orientation.
self.tabBar.translucent = NO;
self.tabBar.translucent = YES;
}

我只是在iOS 13上测试了以下代码。它仍然有效。

- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
self.tabBarController.tabBar.frame = CGRectMake(0, 0, self.view.frame.size.width, self.tabBarController.tabBar.frame.size.height);
}

经过很多挣扎,我也得到了这个解决方案,使用 Swift5 + IOS13.2Sdk。遵循此答案。

class MyUITabBarController:UITabBarController{
override func viewDidLayoutSubviews(){
super.viewDidLayoutSubviews()
var frame = self.tabBar.frame
frame.origin.y = 0
self.tabBar.frame = frame
}
}

最新更新