iphone - 检查 UINavigationItem 标题是否被截断

标签 iphone objective-c ios ipad user-interface

我想检查 UINavigationItem 的标题是否被截断。

我这样设置标题:self.navigationItem.title = whatever

我知道我可以检查 UILabel 中的文本是否像这样被截断:

CGSize size = [label.text sizeWithFont:[UIFont fontWithName:@"myfont" size:18.0]];
if (size.width > label.bounds.size.width) {
    // set a shorter title
}

我什至可以找到显示标题的 UINavigationItemView 对象,如下所示:

UIView *navItemView;
for (UIView *view in self.navigationController.navigationBar.subviews) {
    if ([view isKindOfClass:NSClassFromString(@"UINavigationItemView")]) {
        navItemView = view;
    }
}

但我不能将此方法应用于 navItemView,因为它的宽度似乎总是恰好为 58,这比其中的标题小得多,所以根据它,看起来标题被截断,即使它没有被截断。

所以,我的问题归结为:如何找到 UINavigationItem 中显示的标题的宽度?

更新:我已经找到了我的问题的解决方案,但它并不十分理想、完美或可靠,因此我不会将其标记为答案然而。如果有人有更好的解决方案,请分享。

最佳答案

我想尝试的是,将 UINavigationItemView 转换为 UILabel,使用 .text 属性获取它的文本并获取CGSize 字符串的 -sizeWithFont:constrainedToSize:

UILabel *navItemView;
    for (UIView *view in self.navigationController.navigationBar.subviews) {
         if ([view isKindOfClass:NSClassFromString(@"UINavigationItemView")]) {
           navItemView = (UILabel*)view;
           CGSize theSize = [navItemView.text sizeWithFont:[UIFont systemFontOfSize:navItemView.font.systemFontSize] constrainedToSize:260 lineBreakMode:UILineBreakModeWordWrap];
        }
}

现在您可以使用 theSize.width 属性来找出文本的宽度。

注意:这是理论上的说法,未经测试。我希望它有效!期待你如何解决它。 =)

关于iphone - 检查 UINavigationItem 标题是否被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10958310/

相关文章:

iphone - bundle 名称、可执行文件名称、产品名称...还有其他吗?

objective-c - Paint App 的软刷?

objective-c - 泄漏对象在测试场景中是否被认为是好的?

sql - iOS SQLite 搜索。速度问题

ios - 防止垂直 UIStackView 拉伸(stretch) subview ?

iphone - 制作多 View 应用程序的有效方法?

iphone - 如何从 iphone 相机胶卷中获取相册?

iphone - 如何检查数组中数字的重复?

ios - 如何在 Swift 中以编程方式对水平线设置约束?

objective-c - 简单的 iOS 代码行解释