Получите правильные оценки для навигационного элементаItem.titleView layoutSubviews - PullRequest
4 голосов
/ 03 февраля 2010

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

self.navigationItem.titleView = tempview;

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

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

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

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

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 26 апреля 2011

настроить ваше представление с

[self setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth];

(возможно, в initWithFrame)

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

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

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

2 голосов
/ 04 февраля 2010

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

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

0 голосов
/ 04 февраля 2010

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

tempView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
...