在iOS11上,如何让UIToolbar调整所有项目的大小?

时间:2017-10-25 17:52:07

标签: ios autolayout uitoolbar ios-autolayout

在iOS 10之前,UIToolbar在其项目之间具有灵活的空格键按钮项目会自动缩小字体,以便所有文本都显示在屏幕上。下面的示例(iOS 10):

iOS 10 Sample

自XCode 9以来,在模拟器上运行iOS 11时,我的工具栏显示如下:

iOS 11 Sample

文字不仅缩小了字体大小,而且最后一个条形按钮项目(没有文字,只有图像)也消失了。

试图解决这个问题,我发现自iOS 11以来,UIToolbar现在使用的是Autolayout而不是Frames。与此问题相关的一些帖子建议为项目创建约束,指定项目的宽度和/或高度。

然而,我想要实现的是适合工具栏中的所有内容,即使这意味着减少字体大小。我不认为我可以通过编程方式设置固定的宽度/高度。

此外,这是在故事板上使用IB构建的。 UIBarButton类不允许我访问UILabel(对于文本项)或ImageView(对于带有图像的项)。我已经在运行时检查过customView nil

我尝试通过代码创建项目,将customView设置为UILabeladjustsFontSizeToFitWidth设置为true,但没有任何运气。我不知道iOS 11上灵活空格键项的目的是什么。

那么,如何模仿我以前的行为?适合所有项目并自动调整文本大小?

1 个答案:

答案 0 :(得分:0)

您需要手动设置UIBarButtonItems的大小,例如:

NSUInteger smallFontSize = SMALL_FONT;  // e.g. font size of 12
self.smallFont = [UIFont boldSystemFontOfSize:smallFontSize];
self.smallFontAttributes = @{NSFontAttributeName: self.smallFont};

- (void)shrinkButtonFontSize:(NSArray *)barButtonItems {
 for (UIBarButtonItem* button in barButtonItems) {
    [button setTitleTextAttributes:self.smallFontAttributes forState:UIControlStateNormal];
    [button setTitleTextAttributes:self.smallFontAttributes forState:UIControlStateSelected];
    [button setTitleTextAttributes:self.smallFontAttributes forState:UIControlStateDisabled];
 }
}