2014-10-28 3 views
1

내 자식보기 컨트롤러 (UITableViewController)의 viewDidLoad에서 layoutIfNeeded을 호출 한 후 contentSize.Height이 표시됩니다. 이 값으로 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'는 여전히 자식에서 비어 있으므로 컨테이너는 0 값을 얻습니다. iOS 7에서는 뷰 컨트롤러가 아직 준비되지 않은 것 같습니다 (프레임이 계산되지 않음). 'viewDidAppear'에서'contentSize'를 쿼리 할 수 ​​있습니다.하지만 너무 늦었습니다. – testing

+0

'layoutIfNeeded' 대신'layoutSubviews'를 사용해 보셨습니까? 그래도 문제가 해결되지 않으면, 당신은 – jjv360

+0

지금 내 아이 뷰 컨트롤러의 viewDidLoad''에 layoutSubviews''와 그것을 시도 ... 수동으로 높이를 계산해야 할 수 있습니다. 나는 여전히 같은 결과를 얻는다 (0 값). 저는 수동으로 높이를 계산하려고 노력할 것 같아요. 감사! – testing

0

당신은 부모의 자녀의 viewDidLoad를 호출하고, 레이아웃에있는 tableview를 강제로 아이의있는 tableView를로드 할 수 있습니다. 답장을 보내

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

// Child.m 

-(void)viewDidLoad{ 
[super viewDidLoad]; 
[self layoutSubviews]; 
// or [tableView reloadData]... 
} 
관련 문제