Вопрос по resize, iphone, autoresize, uinavigationcontroller, uinavigationbar – Как динамически изменить размер заголовка в панели навигации

17

У меня есть некоторые представления, которые отображаются в контроллере навигации. Два из этих представлений имеют более длинный заголовок для панели навигации.

Проблема в том, что когда заголовок слишком длинный, некоторые символы усекаются и "...» добавлен.

Можно ли как-то сказать навигационной панели автоматически изменять размер текста заголовка?

Проверьте эту ссылкуstackoverflow.com/questions/2422383/...  Надеюсь, это решит вашу проблему. gopal

Ваш Ответ

6   ответов
33

Использовал приведенный ниже код в ViewDidload.

Цель С

self.title = @"Your TiTle Text";
UILabel* tlabel=[[UILabel alloc] initWithFrame:CGRectMake(0,0, 200, 40)];
tlabel.text=self.navigationItem.title;
tlabel.textColor=[UIColor whiteColor];
tlabel.font = [UIFont fontWithName:@"Helvetica-Bold" size: 30.0];
tlabel.backgroundColor =[UIColor clearColor];
tlabel.adjustsFontSizeToFitWidth=YES;
tlabel.textAlignment = NSTextAlignmentCenter;
self.navigationItem.titleView=tlabel;

Swift Version

self.title = "Your TiTle Text"
let tlabel = UILabel(frame: CGRectMake(0, 0, 200, 40))
tlabel.text = self.title
tlabel.textColor = UIColor.whiteColor()
tlabel.font = UIFont(name: "Helvetica-Bold", size: 30.0)
tlabel.backgroundColor = UIColor.clearColor()
tlabel.adjustsFontSizeToFitWidth = true
tlabel.textAlignment = .center;
self.navigationItem.titleView = tlabel

Надеюсь, что это работает для вас. Спасибо

спасибо Боб, который работал прекрасно! PhoenixDev
Добро пожаловать! jamil
Это добавит новый заголовок поверх "Большое название », теперь у меня есть два названия ... TheAlphaGhost
-1

Вот'Это пример в Swift, который также позволяет использовать несколько строк. С помощьюPureLayout упростить автоматическое расположение.

override func viewDidLoad() {
  super.viewDidLoad()
  configureTitleView()
}

func configureTitleView() {
  let titleLabel = UILabel()
  titleLabel.numberOfLines = 0
  titleLabel.textAlignment = .Center
  titleLabel.font = UIFont.boldSystemFontOfSize(17.0)
  titleLabel.text = searchLoc.mapItem.name
  navigationItem.titleView = titleLabel
  titleLabel.autoPinEdgesToSuperviewMargins() // PureLayout method
  titleLabel.adjustsFontSizeToFitWidth = true
}

И пример использования:

не работает, потому что когда вызывается titleLabel.autoPinEdgesToSuperviewMargins, суперпредставление titleLabel (все еще) равно нулю и, следовательно, устанавливает ограничения. (код 7.3, IOS9) HixField
1

Ни одно из вышеперечисленных решений не показалось мне надежным. Однако я нашел решение, используя различные элементы ответов «обеспечивает», оно в Swift 2 и действительно элегантно, так как не требует никакого специального кода каждый раз, когда вы меняете метку, он просто использует наблюдатели свойств в заголовке.

Обратите внимание, что в моем случае у меня была кнопка «Назад» в левой части панели навигации, которая выводила текст из центра экрана, чтобы исправить это, я использую атрибутивный текст и tailIndent. Все комментарии / информация в коде ниже:

class VCHowToTopic : UIViewController {


    //add handlers so that any manipulation of the title is caught and transferred to the custom drawn UILabel
    override var title : String? {
        set {
            super.title = newValue
            configureTitleView()
        }
        get {
            return super.title
        }
    }

    //MARK: - lifecycle


    func configureTitleView() {
        //some large number that makes the navigationbar schrink down our view when added
        let someVeryLargeNumber = CGFloat(4096)
        //create our label
        let titleLabel = UILabel(frame: CGRect(x: 0, y: 0, width: someVeryLargeNumber, height: someVeryLargeNumber))
        //0 means unlimited number of lines
        titleLabel.numberOfLines = 0
        //define style of the text (we will be using attributed text)
        let style = NSMutableParagraphStyle()
        style.alignment = .Center
        //top compensate for the backbutton which moves the centered text to the right side of the screen
        //we introduce a negative tail indent, the number of 56 has been experimentally defined and might
        //depend on the size of your custom back button (if you have one), mine is 22x22 px
        style.tailIndent = -56
        //create attributed text also with the right color
        let attrText = NSAttributedString(string: title!, attributes: [NSParagraphStyleAttributeName : style,
            NSForegroundColorAttributeName : UIColor.whiteColor()])
        //configure the label to use the attributed text
        titleLabel.attributedText = attrText
        //add it as the titleview
        navigationItem.titleView = titleLabel
    }


}
CGRect(x: 0, y: 0, width: someVeryLargeNumber, height: someVeryLargeNumber) является ключом, чтобы сделать видимость видимой в заголовке John Pang
1

Если у вас есть представление, добавленное в titleView, и вы хотите изменить его размер, вы можете использовать этот код(Свифт 3):

self.translatesAutoresizingMaskIntoConstraints = false
self.layoutIfNeeded()
self.sizeToFit()
self.translatesAutoresizingMaskIntoConstraints = true
7

Быстрая версия принятого ответа + размещение текста метки по центру:

Swift 2.3:

    self.title = "Your TiTle Text"
    let tlabel = UILabel(frame: CGRectMake(0, 0, 200, 40))
    tlabel.text = self.title
    tlabel.textColor = UIColor.whiteColor()
    tlabel.font = UIFont.boldSystemFontOfSize(17) //UIFont(name: "Helvetica", size: 17.0)
    tlabel.backgroundColor = UIColor.clearColor()
    tlabel.adjustsFontSizeToFitWidth = true
    tlabel.textAlignment = .Center
    self.navigationItem.titleView = tlabel

И Свифт 3:

    self.title = "Your TiTle Text"
    let frame = CGRect(x: 0, y: 0, width: 200, height: 40)
    let tlabel = UILabel(frame: frame)
    tlabel.text = self.title
    tlabel.textColor = UIColor.white
    tlabel.font = UIFont.boldSystemFont(ofSize: 17) //UIFont(name: "Helvetica", size: 17.0)
    tlabel.backgroundColor = UIColor.clear
    tlabel.adjustsFontSizeToFitWidth = true
    tlabel.textAlignment = .center
    self.navigationItem.titleView = tlabel
0

вам нужно настроить заголовок панели навигации с помощью uilabel и настроить размер шрифта.

    [self.navigationItem setTitleView:];

Похожие вопросы