如何在iOS 11中换行长标题?

6
我将使用Swift来尝试在iOS 11中使用新的大标题系统。当标题过长时(如下图所示),它会添加“...”而不是换行或缩小文本大小。我该怎么添加换行?
这里是一些我正在使用的设置标题的代码:
self.navigationController?.navigationBar.prefersLargeTitles = true
self.navigationController?.navigationBar.largeTitleTextAttributes = [NSForegroundColorAttributeName: MyGlobalVariable.themeMainColor]
self.navigationController?.navigationBar.largeTitleTextAttributes = [NSFontAttributeName: UIFont.systemFont(ofSize: 22)]
navigationItem.title = "Search by Name"

我非常确定标题只允许有一行。我从未见过两行标题。 - Aju Antony
从我到目前为止所读的一切来看,你可能是对的。我认为我需要从不同的角度来解决我的问题。谢谢! - Coltuxumab
很酷,我昨天确认了标题只能有一个赞。抱歉我没有更新它。被工作卡住了。 :) - Aju Antony
没问题。感谢你在这里的帮助。 - Coltuxumab
2个回答

3

试试这个:

for navItem in (self.navigationController?.navigationBar.subviews)! {
    for itemSubView in navItem.subviews {
        if let largeLabel = itemSubView as? UILabel {
            largeLabel.text = self.title
            largeLabel.numberOfLines = 0
            largeLabel.lineBreakMode = .byWordWrapping
        }
    }
}

对我来说起作用了。

输入图像描述


这个在我添加了一个返回按钮之前是可以正常工作的。但现在出现了某些问题。当我从左边滑动以返回上一页,但又让它弹回原位时,文本自动换行就开始起作用了。非常奇怪。 - Coltuxumab

-1
这是Objective-C相关的内容,但我所做的与backButton有关。我重写了UIViewController的setTitle方法,代码如下:
-(void)setTitle:(NSString *)title{

    [super setTitle:title];

    for(id item in self.navigationController.navigationBar.subviews){

        if([item isKindOfClass:[UIView class]]){

            UIView *lc_view = (UIView *)item;

            for(id subItem in lc_view.subviews){

                if([subItem isKindOfClass:[UILabel class]]){

                    UILabel *lc_label = (UILabel *)subItem;

                    lc_label.text = self.title;
                    lc_label.numberOfLines=0;
                    lc_label.lineBreakMode = NSLineBreakByWordWrapping;
                }
            }
        }
    }

    [self.navigationController.navigationBar layoutSubviews];
    [self.navigationController.navigationBar layoutIfNeeded];
}

然后我想设置标题的地方,我只需这样做:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.02 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

    self.title=@"Lorem ipsum dolor sit amet, consectetuer adipiscing elit.";

});

在我的情况下(在 UIPageViewControllerdidFinishAnimating 方法中更改标题),似乎延迟小于 0.02 不起作用。

抱歉,在真实设备上,0.05 似乎是正确的延迟。 - Bejil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接