2014-10-28 2 views
1

В viewDidLoad моего контроллера детского вида (UITableViewController) Я получаю contentSize.Height после звонка layoutIfNeeded. Чем я установил preferredContentSize с этими значениями. В viewDidLoad моего контейнера (который держит этого ребенка) я также устанавливаю preferredContentSize на основе preferredContentSize ребенка. Это работает на iOS 8, но не на iOS 7.Получите размер стола для просмотра детского представления

Я знаю, что viewDidLoad контроллера детского вида вызывается после viewDidLoad контейнера.

Как получить размер представления в виде таблицы для ребенка или как я могу заставить, чтобы дочерний вид имел макет в своих представлениях перед контейнером?

ответ

0

Я закончил с следующим:

В контроллере представления ребенка я создал отдельный метод, который принимает значения для вид таблицы. Впоследствии я установил предпочтительный размер содержимого.

public void setDocumentList(List<string> documentList){ 
    this.documentList = documentList; 

    this.TableView.ReloadData(); 

    // adjust size for popover 
    float height = TableView.ContentSize.Height; 
    if (this.View.Bounds.Height > 0) { 
     // limit the max size of the popover 
     height = Math.Min (this.View.Bounds.Height, height); 
    } 
    this.PreferredContentSize = new SizeF (320f, height); 
} 

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

public void setDocumentList(List<string> documentList){ 
    documentListController.setDocumentList (documentList); 
    this.PreferredContentSize = documentListController.PreferredContentSize; 

    // some autolayout constraints ... 
} 

Этот вид работ. Я получаю правильные значения, но значения popover неправильны в начале. Если кому-то интересно, это язык C#. Я по-прежнему открыт для лучших решений.

0

Вы можете попробовать отправить запрос макета после загрузили все виды:

// In the container 
-(void) viewDidLoad { 

    // ... 

    [self.view performSelector:@selector(setNeedsLayout) withObject:nil afterDelay:0]; 

} 
+0

Спасибо за ваш ответ. Я попробовал, но «contentSize» по-прежнему пуст в дочернем элементе, и поэтому контейнер получает нулевые значения. Кажется, что в iOS 7 контроллер представления еще не готов (не рассчитан кадры). В 'viewDidAppear' я могу запросить' contentSize', но это слишком поздно. – testing

+0

Вы пытались использовать 'layoutSubviews' вместо' layoutIfNeeded'? Если это не сработает, вам может потребоваться вычислить высоту вручную ... – jjv360

+0

Теперь я попробовал его с 'layoutSubviews' в' viewDidLoad' моего контроллера детского вида. Я все равно получаю тот же результат (нулевые значения). Я думаю, что я попытаюсь вычислить высоту вручную. Благодаря! – testing

0

Вы можете загрузить tableView дочернего элемента, вызвав viewDidLoad из дочернего элемента в родительском элементе, и форматирование layoutview в макете.

// Parent.m 
[Child view]; 
[self layoutParentViewsOrDoSomething]; 

// Child.m 

-(void)viewDidLoad{ 
[super viewDidLoad]; 
[self layoutSubviews]; 
// or [tableView reloadData]... 
} 
Смежные вопросы