2016-12-07 2 views
0

Вот мой NavBarUINavigationItem barButtonItem customView обнаружения других элементов, то настройки ширины

enter image description here

Теперь я знаю, как добавить customView на leftBarButtonItem, используя этот код

navigationItem.leftBarButtonItem!.customView = someCustomView 

Как видно на мой скриншот здесь

enter image description here

Но вопрос в том, есть ли способ, который я мог бы обнаружить, если есть navigationItem s рядом с моим leftBarButtonItem, чтобы я мог установить ширину динамической? вместо перекрытия, как скриншоты?

Вот несколько скриншотов моего теста

enter image description here

Примечание: Да, я знаю, как установить рамку с помощью кода someCustomView.frame = CGRect(.....) также, кажется, что UINavigationBar/Item наследует от NSObject, а не UIView

Edit: Таким образом, очевидно после того, как делать много кодирования, перекодирования, а также исследования, единственная часть UINavigationBar/UINavigationItem т шляпа автоматически изменяет размеры в соответствии с влево и вправоbarButtons является titleView, который отстой в пути.

Так, по моим сведениям, единственный путь для достижения этой цели: enter image description here

является использование titleView свойство UINavigationItem, который не отвечает на мой вопрос.

ответ

0

Если -hopefully- эти выходы, которые ищут:

enter image description here

enter image description here

Затем вы должны установить titleView из navigationItem:

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

Он динамически обрабатывает ширину, чтобы не пересекаться.

Например, в follwoing код на фрагменте я установить значение navigationItem.titleView как UILabel (и, конечно, вы можете настроить его):

override func viewDidLoad() { 
    super.viewDidLoad() 

    let label = UILabel(frame: CGRect(x: 0, y: 0, width: 300, height: 40)) 
    label.text = "Some very long text that should be in the middle of the navigation bar" 
    label.textAlignment = .center 
    label.textColor = UIColor.blue 

    navigationItem.titleView = label 
} 

Результат должен быть похож на скриншотах выше ,

Обратите внимание, что «Пункт 01», «Пункт 02» и «Пункт 03», которые появляются в скриншотах добавляются непосредственно в раскадровке, нет коды, связанной с их добавлением.

Если вы хотите, чтобы ярлык к на следующем из "Пункта 01" кнопка, просто дай ему:

let label = UILabel(frame: CGRect(x: 0, y: 0, width: 300, height: 40)) 
     label.text = "my label" 
     label.textAlignment = .left 
     label.textColor = UIColor.blue 

     navigationItem.titleView = label 

Выхода должен быть как:

enter image description here

Надеется, что это помогло.

+0

Да, я тоже думал об этом, но вещь с titleViews заключается в том, что она «центрирована», а не «leftAligned». –

+0

@ ZonilyJame хорошо, если вы хотите установить его как UILabel (это то, что нужно в вашем случае), проверьте мое редактирование. –

+0

Я тоже сделал это, спасибо за усилия, но то, что я ищу здесь, это обнаружение элементов в «NavBar», а затем установка ширины соответственно. Точно так же, как «Заголовок NavigationBar» автоматически обрезается, я ищу способ реплицировать это поведение, в этом случае для 'UINavigationItem' –

Смежные вопросы