Пользовательский UIView как заголовок навигационного элемента
Я хочу создать простой пользовательский вид и использовать его для navigationItem.titleView. Мой пользовательский вид очень прост, имеет только вид изображения и метку: [изображение]-[метка]. У меня есть файл XIB, в котором я определил все ограничения (оба подпредставления имеют ограничение для суперпредставления - я хочу, чтобы высота и ширина подпредставлений определяли высоту и ширину всего настраиваемого представления). Проблема в том, что когда я создаю экземпляр вида из XIB, вот так:
class func titleViewWithTitle(title: String, icon: UIImage?) -> TitleView {
let titleView = NSBundle.mainBundle().loadNibNamed("TitleView", owner: self, options: nil).first as TitleView
titleView.title.text = title
titleView.icon.image = icon
titleView.layoutSubviews()
return titleView
}
размер этого представления не определяется его детьми. Он имеет размер, который был установлен вручную в Интерфейсном Разработчике. Что я могу сделать, чтобы заставить представление динамически вычислять размер?
1 ответ
В своем пользовательском представлении переопределите метод layoutSubviews и добавьте следующее:
CGSize targetSize = [self systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
Создайте CGRectFrame из этого и установите этот фрейм как новый фрейм для себя (который является пользовательским представлением).
Это в основном найдет наименьший возможный кадр, который все еще охватывает его контент так, чтобы весь контент отображался.
Примечание. Все подпредставления этого пользовательского представления должны иметь правильно настроенное сопротивление сжатию. Т.е. они должны сопротивляться сокращению.