Предотвращение анимации при динамическом изменении размера popover

Итак, я понял это сам и нашел этот ответ, чтобы подтвердить:

Запретить анимацию анимации contentSizeForViewInPopover

В основном я нахожусь в подобной лодке, потому что хочу динамически изменять размер моего popover, в зависимости от того, сколько данных я должен отображать. Я также получаю это действие анимации, когда представление popover перемещается на свои места. Проблема в том, что я не могу установить размер содержимого popover в вызывающем/родительском объекте, потому что ни размер представления содержимого для текстового представления, ни кадр для текстового представления в моем popover не известен до тех пор, пока не вызывается viewDidAppear или viewDidLayoutSubviews, но, конечно, в этот момент это слишком поздно, popover уже на пути к тому, чтобы быть видимым, таким образом, я получаю эту нежелательную анимацию.

Я динамически устанавливаю размер текстовых представлений в классе контроллера popover view, чтобы соответствовать количеству данных, отображаемых текстовыми представлениями, и это работает только в том месте, где их размер кадра определен/известен/однако вы хотите на слово, когда он еще не достиг этой точки в жизненном цикле просмотра.

Я должен упомянуть, что у меня есть мои контроллеры просмотров и просмотр всех сделанных в раскадровке.

Это имеет смысл? Надеюсь, я объясню это хорошо. Любая помощь или предложения очень ценится.

EDIT Вот мой метод viewDidLayoutSubviews с контроллера представления, который я загружаю в popover - надеюсь, это дает понять. В первый раз, когда это загрузится, если я не сделаю это в viewDidLayoutSubviews или viewDidAppear, фрейм для моих 2 текстовых представлений - CGRectZero, текстовые представления не будут изменять размер для контента правильно, а размер popover не подходит:

- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
self.physicianDataNewValueTextView.text = self.physicianDataNewValue;
CGRect frame = self.physicianDataNewValueTextView.frame;
frame.size.height = self.physicianDataNewValueTextView.contentSize.height;
self.physicianDataNewValueTextView.frame = frame;
self.physicianDataOldValueTextView.text = self.physicianDataOldValue;
frame = self.physicianDataOldValueTextView.frame;
frame.size.height = self.physicianDataOldValueTextView.contentSize.height;
self.physicianDataOldValueTextView.frame = frame;
self.contentSizeForViewInPopover = CGSizeMake(384.0f, self.physicianDataOldValueTextView.frame.size.height + 75.0f);
}
1 ответ

Поэтому я решил использовать делегирование. Вместо того, чтобы сбросить размер содержимого в контроллере представления для popover, я вызываю своего делегата (который является содержащим контроллером представления) с новым размером, поэтому я могу установить его там, где анимированное свойство установлено в NO. Хорошо работает.

licensed under cc by-sa 3.0 with attribution.