2013-05-09 3 views
3

Так что я понял это сам и нашел этот ответ, чтобы подтвердить:Предотвращение анимации при динамическом изменении размера поповера

Prevent contentSizeForViewInPopover from animating

В основном я нахожусь в подобной лодке в том, что я хочу, чтобы динамически изменять размеры моего поповера, в зависимости от того, как много данных, которые я должен отображать. Я также получаю это действие анимации, когда представление 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); 
} 

ответ

2

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

+0

Отличная помощь, спасибо! Код, который я использовал в моем методе делегата: '[self.chooseEquipmentPopoverController setPopoverContentSize: размер анимированный: NO];' –

+0

Рад, что эта публикация помогла. Если бы вы не проголосовали за мой ответ, это было бы здорово, спасибо (если вы уже не сделали). – fogwolf

Смежные вопросы