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

Posted

技术标签:

【中文标题】自定义标题视图未在 iOS 10 中居中【英文标题】:Custom Title View not Centered in iOS 10 【发布时间】:2017-09-25 22:33:16 【问题描述】:

这篇文章是一个单独的主题,但与Custom Nav Title offset ios 11相关

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

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

要重现问题,只需在现有的根视图控制器上放置一个按钮,该按钮会推动另一个视图控制器。 “

【问题讨论】:

【参考方案1】:

支持早期版本的 iOS 所需的简单更改;您应该正确调整您的自定义标题视图的大小,使其成为实际的预期宽度。 iOS 11 会尝试根据约束调整标题视图的宽度以适应可用空间,但 iOS 10 及更低版本会尽量保持视图的大小。

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

干杯!

【讨论】:

我刚刚下载并测试了您的项目,我发现它是正确的,没有问题。我不知道为什么这很重要,但我实际上所做的是,我将根视图控制器更改为新视图控制器,并连接新视图控制器上的按钮以推送已经存在的控制器。 我通常不使用 github 帐户,但让我开始吧,这样我就可以向您发送我的项目的副本。 哇哦,好吧。我的和你的其实是一样的。事实证明,这只会发生在 iOS 10 上。 @BrandonMantzey 我使用 Xcode 9 GM、iOS 11 iPhone X 模拟器清理并运行了您的项目。在标题视图正确居中的情况下,一切都按预期运行。 @BrandonMantzey 可能想要更新您的问题,表明这与 iOS 10 相关;我正在尝试下载 iOS 10.3.1 模拟器,但 Apple 服务器不合作。我所有的物理设备都已更新到 iOS 11,所以我会尽快更新【参考方案2】:

对于 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


【讨论】:

以上是关于自定义标题视图未在 iOS 10 中居中的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中自定义权限请求视图

在ios的uitableview中自定义单元格编辑样式

当按钮是iOS中自定义单元格的子视图时,如何动态更改按钮文本?

如何在ios中自定义推送和弹出动画时将视图传递给另一个控制器? [关闭]

如何将自定义视图拖动为 Xcode 6 中自定义视图的私有属性

如何在 Swift iOS 中自定义导航控制器