iPhone X上的IOS标签栏高度问题

时间:2018-02-01 11:31:07

标签: objective-c height uitabbar iphone-x

我尝试了很多解决方案,包括This Solution。所以请在将其标记为重复之前阅读完整的问题。对于iPhone X,我使用安全区域指南来支持iPhone X设计。一切都很好,除了标签栏我仔细检查了它的安全区域限制,但仍然在运行后它的项目分散了。 enter image description here

但请注意,标签栏的高度是恒定的,正确的只是其中的项目是打扰。

这是我的故事板的图像,请不要它的限制和调整。

enter image description here

据我所知,一切都是正确的......但是我确实错过了一些东西,请检查一下,任何建议都会有很大的帮助。但请不要我已经尝试了几乎所有在堆栈上提到的方式或谷歌的前几个链接。

这是我用来填充项目图片的代码。

UIColor *color = [UIColor colorWithRed:192.0f/255.0f green:41.0f/255.0f blue:66.0f/255.0f alpha:1.0f];

NSDictionary *textColors = [NSDictionary dictionaryWithObjectsAndKeys:color, NSForegroundColorAttributeName, nil];

for(UITabBarItem *tab in self.tabBar.items)
{
    [tab setTitleTextAttributes:textColors forState:UIControlStateNormal];
    [tab setTitleTextAttributes:textColors forState:UIControlStateSelected];
}
self.tabBar.itemPositioning = UITabBarItemPositioningAutomatic;

[self.tabBar.items[0] setImage:[[UIImage imageNamed:@"search_icon"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[self.tabBar.items[1] setImage:[[UIImage imageNamed:@"user_icon"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[self.tabBar.items[2] setImage:[[UIImage imageNamed:@"call_icon"]
    imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[self.tabBar.items[3] setImage:[[UIImage imageNamed:@"services_icon"]
    imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];

4 个答案:

答案 0 :(得分:1)

起初我尝试了几乎所有可能的解决方案,但这根本不起作用,但最后在某种程度上我添加了一些底部的负余量。让我们说“-1”,然后一切都开始像魅力一样工作。我也试过为实验设置正余量。但那不起作用,我只得出了负数作品。这一定是UIKit的一个问题。 设置安全区域的底部约束,因为任何负数都可以解决此问题。 enter image description here

检查其底部约束。

答案 1 :(得分:0)

尝试使用文档中建议的方法来设置项目。

  

要直接配置标签栏项,请使用setItems:animated:方法   标签栏本身。

- (void)setItems:(NSArray<UITabBarItem *> *)items animated:(BOOL)animated;

做这样的事情。

UIIImage *image0 = [UIImage imageNamed:@"search_icon"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UITabBarItem *item0 = [[UITabBarItem alloc] initWithTitle:self.tabBar.items[0].title image:image0 tag:0];
// And so on or in a loop
NSArray<UITabBarItem *> *items = @[ item0, ]; // Add all items here
[self.tabBar setItems:items animated:NO];

在这里阅读更多内容

https://developer.apple.com/documentation/uikit/uitabbar?language=objc

答案 2 :(得分:0)

只需将UITabBar放在UIView中!

这对我有用。

答案 3 :(得分:0)

这肯定会起作用。

覆盖func viewDidLoad(){         super.viewDidLoad()

    let numberOfItems = CGFloat(tabBArView.items!.count)
    let tabBarItemSize = CGSize(width: tabBArView.frame.width / numberOfItems, height: 48)

     tabBArView.selectionIndicatorImage =  UIImage.imageWithColor(color: UIColor.orange, size: tabBarItemSize).resizableImage(withCapInsets: UIEdgeInsets.zero)
    tabBArView.frame.size.width = self.view.frame.width + 4
    tabBArView.frame.origin.x = -2

扩展UIImage {

class func imageWithColor(color: UIColor, size: CGSize) -> UIImage {
    let rect: CGRect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
    UIGraphicsBeginImageContextWithOptions(size, false, 0)
    color.setFill()
    UIRectFill(rect)
    let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    return image
}