4

У меня есть подкласс UIView, что я добавил в качестве titleView в виде navigationItem, используя следующую строку кода:Получить правильные оценки для navigationItem.titleView layoutSubviews

self.navigationItem.titleView = tempview; 

достаточно легко. Это прекрасно работает. Моя проблема заключается в том, что у этого navigationItem иногда обновляется rightBarButton (иногда нет кнопки, иногда есть одна кнопка стандартного размера, иногда есть кнопка большего размера).

я понял, что я мог бы просто использовать layoutSubviews метод tempview класса, который я добавил, как titleView поэтому я ставлю это в:

-(void)layoutSubviews { 
    [super layoutSubviews]; 
    self.mylabel.frame = self.bounds; 
} 

Это не похоже на работу, так как он не правильно измените размер заголовка, когда обновляется элемент rightBarButton.

Я также заметил, что границы не растут, как только они становятся меньше, они просто меняют положение.

Я пробовал использовать setNeedsLayout и layoutIfNeeded, но они просто «изменяют размер» представления с неправильными границами.

Я также удостоверился, что элемент rightBarButton установлен в ноль, но вид все еще не будет правильно расширяться после уменьшения.

Спасибо за помощь!

ответ

0

Вместо переопределения -layoutSubviews вы пробовали установить свойство autoresizingMask?

tempView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
+1

Я пробовал это, и он, похоже, ничего не делает, кроме подхода 'layoutSubviews'. Спасибо хоть! – mjdth

2

По умолчанию layoutSubviews ничего не делает. Вы также никогда не изменяете размер titleView, поэтому, если navbar не сделает это для вас, неудивительно, что ничего не меняется.

Поскольку вы меняете только размер одного из подзонов, я не думаю, что автоматизация будет работать, так как я уверен, что она срабатывает, когда супервизор (тот, у кого есть autoresizesubviews enabled) изменяет размер. Я бы предложил пересчитать размер заголовка, когда вы измените правую кнопку. Если он автоматически подходит, когда вы добавляете его в первый раз, вы можете удалить и прочитать его, но я знаю, что это довольно уродливый хак.

4

настроить ваш взгляд с

[self setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth]; 

(вероятно, в initWithFrame)

затем реализовать

- (void)willMoveToSuperview:(UIView *)newSuperview 
{ 
    [self setFrame:[newSuperview bounds]]; 
} 

теперь у вас есть вид, соответствующий размер контейнера, и изменение размера автоматически.

+0

Почему это не отмечено как правильный ответ? Это отличный совет - willMoveToSuperview - это ключ –