自定义标题视图未居中 iOS 10

Custom Title View not Centered in iOS 10

此 post 是一个单独的主题,但与

相关

我创建了一个新线程,因为它是一个单独的问题。

来自项目:https://github.com/ekscrypto/Swift-Tutorial-Custom-Title-View

要重现问题,只需在现有的根视图控制器上放置一个按钮来推动另一个视图控制器。 “< 返回”按钮使标题快速移动,这使得它非常不居中。我怎样才能解决这个问题?谢谢。

支持早期版本所需的简单更改iOS;您应该适当地将自定义标题视图的大小调整为实际的预期宽度。 iOS 11 尝试根据约束调整标题视图的宽度以适应可用 space 但 iOS 10 及以下将尝试尽可能保持视图的大小.

因此,解决方案是打开 MyCustomTitleView.xib 文件,并将 MyCustomTitleView 的宽度设置为合理的值,例如 180pt。

干杯!

对于 iOS 10 及以下版本,您需要为您的属性 titleLabel 设置 CGFrame。 这是代码示例。

- (void)viewDidLoad {
    [super viewDidLoad];

    UILabel *titleLabel = [[UILabel alloc]init];
    NSDictionary *fontAttribute = @{ NSFontAttributeName:[UIFont fontWithName:@"SFProText-Medium" size:15.f]};
    NSAttributedString *str = [[NSAttributedString alloc]initWithString:@"YOUR TITLE"
    attributes:fontAttribute];
    titleLabel.attributedText = str;
    [titleLabel sizeToFit]; // This method create a frame
    self.navigationItem.titleView = titleLabel;

}

Swift 示例:

override func viewDidLoad() {
    super.viewDidLoad()

    let titleLabel = UILabel()
    let title = NSMutableAttributedString(string: "Your title", attributes:[
        NSAttributedStringKey.foregroundColor: UIColor.blue,
        NSAttributedStringKey.font: UIFont.systemFont(ofSize: 17.0, weight: UIFont.Weight.light)])
    titleLabel.attributedText = title
    titleLabel.sizeToFit()
    self.navigationItem.titleView = titleLabel

}