自定义标题视图未在 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中自定义推送和弹出动画时将视图传递给另一个控制器? [关闭]