#objective-c #cocoa
#objective-c #какао
Вопрос:
У меня есть функция awakeFormNib, которая добавляет некоторые подвиды. Он не использует автоматическую компоновку. Обычно это выглядит идеально. На некоторых машинах он отображается с одним из вложенных представлений слишком маленьким. Как только я изменяю размер окна (с помощью мыши), все становится идеально. Кажется, что операция компоновки seme выполняется до awakeFromNib на этих машинах (по предположению). Я нашел очень неэлегантный обходной путь, когда в конце awakeFromNib я вызываю setFrame в одном из подвидов, чтобы изменить его размер на один пиксель. Это должно иметь тот же эффект, что и изменение размера с помощью мыши, поскольку это приводит к отображению макета так, как ожидалось.
Итак, мой вопрос заключается в следующем: есть ли функция, которую я могу вызвать в окне или его подпросмотрах, которая вызывает те же операции компоновки, которые были бы вызваны изменением размера (с помощью мыши) или изменением размера фрейма в коде. я попытался вызвать setNeedsLayout и setNeedsDisplay: но безуспешно.
Ответ №1:
Вам необходимо реорганизовать весь ваш код фрейминга с awakeFromNib
на:
- (void)layoutSubviews {
[super layoutSubviews];
}
Почему?
Потому что это метод, который вызывается, когда представление знает, каковы его размеры. Этот метод также будет вызываться всякий раз, когда происходит изменение фрейма вашего представления.