我已经为ios 11使用新的Xcode 9测试版构建了我的应用程序.我发现UITabBar存在一个问题,物品在UITabBar中传播,标题与图片对齐.我try 过修改代码以使其正常工作,但仍然没有成功.

ios 10+

enter image description here

ios 11

enter image description here

我可以用tabBarItem.titlePositionAdjustment来改变头衔的位置

推荐答案

我正在维护一个主要用Objective-C编写的大型iPad应用程序,它在几个iOS版本中幸存下来.我遇到了这样的情况:我需要在iOS 11之前的标签栏中出现几个标签栏(在标题上方而不是旁边有图标).我的解决方案是创建一个UITabBar的子类,覆盖traitCollection方法,以便它总是返回一个水平紧凑的trait集合.这会导致iOS 11在所有选项卡栏按钮的图标下方显示标题.

为了使用它,将故事板中选项卡栏的自定义类设置为这个新的子类,并将代码中指向选项卡栏的任何出口更改为这个新类型(不要忘记导入下面的头文件).

这个在这种情况下,h文件几乎是空的:

//
//  MyTabBar.h
//

#import <UIKit/UIKit.h>

@interface MyTabBar : UITabBar

@end

这是答案.使用traitCollection方法实现的m文件:

//
//  MyTabBar.m
//

#import "MyTabBar.h"

@implementation MyTabBar

// In iOS 11, UITabBarItem's have the title to the right of the icon in horizontally regular environments
// (i.e. the iPad).  In order to keep the title below the icon, it was necessary to subclass UITabBar and override
// traitCollection to make it horizontally compact.

- (UITraitCollection *)traitCollection {
    return [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact];
}

@end

Objective-c相关问答推荐

如何检测 iPhone 5c 的 colored颜色 ?

处理 ARC 中的指针对指针所有权问题

XCTAssert 和 XCTAssertTrue 有什么区别?

Objective C 代码是否有 github markdown 语言标识符?

CABasicAnimation 无 HUGE_VALF 无限重复?

块引用作为Objective-C中的实例变量

NSUInteger 不应该在格式字符串中使用吗?

CF 对象与 NS 对象

如何从 RGBA 创建 UIColor?

从 UIPageViewController 中移除视图控制器

访问当前视图的父视图 - iOS

[NSNull null] 和 nil 有什么区别?

UIViewController 的 prefersStatusBarHidden 不起作用

Objective-C:块 vs. Select 器 vs. 协议

无法加载 xcode 项目,因为它已从另一个项目或工作区打开

Objective-C 中的非正式协议?

如何从 UIGestureRecognizer 获取 UITouch 位置

判断文件是否存在于路径中

有没有办法在不使用 UINavigationController 的情况下更改 Storyboard 中 UINavigationBar 的高度?

使用正则表达式查找/替换 NSString 中的子字符串