【问题标题】:How do you set the font size on a UIBarButtonItem?如何在 UIBarButtonItem 上设置字体大小?
【发布时间】:2010-04-27 11:34:27
【问题描述】:

我找不到在自定义UIBarButtonItem 中设置标题字体大小的方法。我能想到的唯一方法是将其设置为图像,我想避免这种情况。还有其他建议吗?

【问题讨论】:

标签: ios uibarbuttonitem uifont


【解决方案1】:

目标-C:

NSUInteger fontSize = 20;
UIFont *font = [UIFont boldSystemFontOfSize:fontSize];
NSDictionary *attributes = @{NSFontAttributeName: font};

UIBarButtonItem *item = [[UIBarButtonItem alloc] init];

[item setTitle:@"Some Text"];
[item setTitleTextAttributes:attributes forState:UIControlStateNormal];

self.navigationItem.rightBarButtonItem = item;

斯威夫特:

let fontSize:CGFloat = 20;
let font:UIFont = UIFont.boldSystemFont(ofSize: fontSize);
let attributes:[String : Any] = [NSFontAttributeName: font];
    
let item = UIBarButtonItem.init();
    
item.title = "Some Text";
item.setTitleTextAttributes(attributes, for: UIControlState.normal);
    
self.navigationItem.rightBarButtonItem = item;

【讨论】:

  • 你也可以使用UIAppearance代理setTitleTextAttributes
  • 次要注意:UITextAttributeFont 键值在 iOS 7 中已被弃用,您可以使用 NSFontAttributeName 代替。
【解决方案2】:

创建一个 UILabel 并使用-initWithCustomView:

【讨论】:

  • 那我是不是把 UIBarButtonItem 传给 UILabel 并正常设置字体呢?我可能对您的方法也有疑问,因为我正在使用 Interface Builder 将 UIBarButtonItem 放入 UIToolbar。
  • 使用 setTextAttributes:forState:
【解决方案3】:

作为kennytm suggests 的具体示例,您可以使用以下内容创建UIBarButtonItem

UILabel *txtLabel = [[UILabel alloc] initWithFrame:rect];
txtLabel.backgroundColor = [UIColor clearColor];
txtLabel.textColor = [UIColor lightGrayColor];
txtLabel.text = @"This is a custom label";
UIBarButtonItem *btnText = [[[UIBarButtonItem alloc] initWithCustomView:txtLabel] autorelease];

然后,您可以将其添加为UIToolbar 上的居中文本,例如:

UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:rect];
toolBar.barStyle = UIBarStyleBlackTranslucent;
UIBarButtonItem *flexSpace1 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];
UIBarButtonItem *flexSpace2 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];

[toolBar setItems:[NSArray arrayWithItems:flexSpace1, btnText, flexSpace2, nil]];

(当然,为了获得正确的格式,用于初始化 txtLabeltoolBarrect 应该是正确的大小......但这是另一个练习。)

【讨论】:

  • 您可以使用 [txtLabel sizeToFit] 使其大小正确。作为旁注,我不确定此方法是否会将蓝色胶囊背景保留为按钮项,因此您可能必须使用一些自定义图形。但这是您最好的选择,因为如果您使用标题对其进行初始化,您实际上无法设置条形按钮项的字体大小。
  • 您也应该设置标签的帧大小。在我的情况下,没有显示任何项目,因为它们的宽度和高度初始化为 0。
【解决方案4】:
[[UIBarButtonItem appearance]setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                     [UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], NSForegroundColorAttributeName,
                                                     [UIFont fontWithName:@"FONT-NAME" size:21.0], NSFontAttributeName, nil]
                                           forState:UIControlStateNormal];

【讨论】:

    【解决方案5】:

    Swift5:

    let item = UIBarButtonItem(title: "", style: .plain, target: self, action: #selector(self.onItemTapped))
    let font:UIFont = UIFont(name: "", size: 18) ?? UIFont()
    item.setTitleTextAttributes([NSAttributedString.Key.font: font], for: UIControl.State.normal)
    

    【讨论】:

      【解决方案6】:
      let barButtonItem: UIBarButtonItem = UIBarButtonItem(title: "Title",
                                                           style: .plain,
                                                           target: nil,
                                                           action: nil)
      let font: UIFont = UIFont.systemFont(ofSize: 12.0)
      let textAttributes: [NSAttributedString.Key: Any] = [.font: font]
      
      barButtonItem.setTitleTextAttributes(textAttributes, for: .normal)
      barButtonItem.setTitleTextAttributes(textAttributes, for: .selected)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-22
        • 2015-01-16
        • 2010-09-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多