首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调整导航栏标题字体大小以适应文本

调整导航栏标题字体大小以适应文本
EN

Stack Overflow用户
提问于 2016-01-20 18:23:20
回答 3查看 7.3K关注 0票数 3

是否可以调整导航栏标题的字体大小以适应文本?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-21 04:22:28

您可以创建一个UILabel并将其设置为UINavigationItem的titleView。见Apple:ref/occ/instp/UINavigationItem/titleView

对于创建的UILabel,可以设置adjustsFontSizeToFitWidth & minimumScaleFactor属性以使其与标题相匹配。医生:ref/occ/instp/UILabel/adjustsFontSizeToFitWidth

一些守则:

代码语言:javascript
运行
复制
- (void)setMyTitle:(NSString *)title
{
    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.navigationController.view.bounds.size.width - 100, 44)];
    titleLabel.text = title;
    titleLabel.font = [UIFont systemFontOfSize:16];
    titleLabel.textColor = ...
    ...
    self.navigationItem.titleView = titleLabel;
}
票数 3
EN

Stack Overflow用户

发布于 2016-01-20 22:46:50

在viewDidLoad中尝试以下操作:

代码语言:javascript
运行
复制
NSDictionary *attributes = @{ NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-Bold" size:14] };

[self.navigationController.navigationBar setTitleTextAttributes:attributes];

注意:这种解决方案的缺点是,您必须预先知道字体大小,然后手动设置它。我不确定您是否可以将导航栏的标题牌设置为自动更改字体大小以适应文本。

编辑:

原来你可以设置navigation bar's label to resize the font size dynamically

票数 0
EN

Stack Overflow用户

发布于 2019-08-22 01:13:14

Swift 5

代码语言:javascript
运行
复制
private var isFirst = true
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    guard isFirst else {
    return
    }
    isFirst = false
    // Adjust Navigation Title by text
    if let navigationController = navigationController {
    let bar = navigationController.navigationBar
    var minX: CGFloat = 0
    var maxX: CGFloat = bar.bounds.width
    if let lastLeft = navigationItem.leftBarButtonItems?.last, let leftView = lastLeft.view, let buttonBarStackViewFrame = leftView.superview?.frame {
        minX = buttonBarStackViewFrame.maxX
    }
    if let firstRight = navigationItem.rightBarButtonItems?.first, let rightView = firstRight.view, let buttonBarStackViewFrame = rightView.superview?.frame {
        maxX = buttonBarStackViewFrame.minX
    }

    let titleLabel = UILabel(frame: CGRect(x: 0, y: 0, width: maxX - minX, height: bar.bounds.height))
    titleLabel.text = LocStr(.favorite_master_title)
    titleLabel.adjustsFontSizeToFitWidth = true
    titleLabel.minimumScaleFactor = 0.3
    titleLabel.textColor = UIColor.white
    titleLabel.textAlignment = .center
    if UIDevice.current.modelName.contains(PLUS) {
        titleLabel.font = UIFont(name: GENERAL_FONT_NAME, size: PLUS_NAVIGATION_BAR_TITLE_FONT)!
    } else {
        titleLabel.font = UIFont(name: GENERAL_FONT_NAME, size: GENERAL_NAVIGATION_BAR_TITLE_FONT)!
    }
    navigationItem.titleView = titleLabel
    }
}

有一个扩展

代码语言:javascript
运行
复制
extension UIBarButtonItem {
    var view: UIView? {
        return value(forKey: "view") as? UIView
    }
}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34907641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档