是否可以调整导航栏标题的字体大小以适应文本?
发布于 2016-01-21 04:22:28
您可以创建一个UILabel并将其设置为UINavigationItem的titleView。见Apple:ref/occ/instp/UINavigationItem/titleView
对于创建的UILabel,可以设置adjustsFontSizeToFitWidth & minimumScaleFactor属性以使其与标题相匹配。医生:ref/occ/instp/UILabel/adjustsFontSizeToFitWidth
一些守则:
- (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;
}发布于 2016-01-20 22:46:50
在viewDidLoad中尝试以下操作:
NSDictionary *attributes = @{ NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-Bold" size:14] };
[self.navigationController.navigationBar setTitleTextAttributes:attributes];注意:这种解决方案的缺点是,您必须预先知道字体大小,然后手动设置它。我不确定您是否可以将导航栏的标题牌设置为自动更改字体大小以适应文本。
编辑:
原来你可以设置navigation bar's label to resize the font size dynamically
发布于 2019-08-22 01:13:14
Swift 5
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
}
}有一个扩展
extension UIBarButtonItem {
var view: UIView? {
return value(forKey: "view") as? UIView
}
}https://stackoverflow.com/questions/34907641
复制相似问题