如何在iOS 11中打破长大标题?

时间:2017-09-27 03:09:35

标签: swift navbar title ios11 xcode9

我正在尝试使用Swift在iOS 11中使用新的大型标题系统。当标题太长时(参见图片示例),它会添加...而不是换行或缩小文本大小。如何添加换行符?

Example image with long title

以下是我用来设置标题的一些代码:

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"

2 个答案:

答案 0 :(得分:1)

试试这个:

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
        }
    }
}

它对我有用。

enter image description here

答案 1 :(得分:0)

这是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.";

});

在我的情况下(更改 UIPageViewController didFinishAnimating 方法中的标题),似乎延迟< 0.02没有工作。

相关问题