2012-07-17 2 views
0

나는 UITableView이 포함 된 팝업이 있습니다. 스토리 보드에서 전체 테이블에 맞게 팝업 높이를 설정 했으므로 멋지게 표시됩니다. 그러나 일부 상황에서는 더 적은 셀을 표시해야하며이 경우 팝업 창의 높이를 변경하고 싶습니다. 나는 이렇게 :contentSizeForViewInPopover가 애니메이션 화되지 못하도록 방지

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    if (trimFourCells) { // reduce the popover's height by that of four cells 
     CGSize size = self.contentSizeForViewInPopover; 
     size.height -= 4*60; 
     self.contentSizeForViewInPopover = size; 
    } 
} 

변화가 생기있는 것을 제외하면 그것은 효과적이다 : 첫째로 가득 차있는 크기는 보여지고, 그 후에 대략 1 초에서 응축한다.

제 질문은이 애니메이션을 비활성화 할 수 있는지 여부입니다.

NO을 전달하려고 시도했지만 크기가 변경된 후에도 해당 행을 이동하려고 시도했습니다. 그것은 애니메이션을 막지 못했습니다. 그런 다음 코드를 viewWillAppear으로 옮기려고 시도했지만 높이를 변경하지 않았습니다. 여기에 솔루션입니다, @frowing에

[popoverController setPopoverContentSize:size animated:NO]; 

답변

1

그냥 이런

- (void)setPopoverContentSize:(CGSize)size animated:(BOOL)animated 

를 사용합니다. popover의 코드에서 크기를 변경하는 대신 호출자에서 수행해야합니다. 이 디스플레이 전에 완료 이후, 반군 애니메이션이 없다는 것을

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    UIPopoverController *pc = ((UIStoryboardPopoverSegue*)segue).popoverController; 
    if (trim_nCells > 0) { // trim that many cells from the table 
     CGSize size = pc.contentViewController.contentSizeForViewInPopover; 
     size.height -= trim_nCells * cellHeight; 
     [pc setPopoverContentSize:size animated:NO]; 
    } 
    (... rest of the prep code ...) 
} 

주, 그래서 animated: PARAM 값이 적용되지 않습니다 : 나는 prepareForSegue에 다음과 같은 코드를 추가했습니다.

+0

감사합니다. 이것은 문제를 해결했지만, 플리커의 새로운 문제를 야기합니다. popover는 전체 크기로 표시되고 나면 나중에 다시 크기가 조정됩니다. 크기를 조정 한 후에'[super viewDidAppear : animated]'줄을 옮겨서이 문제를 해결하려고했지만 도움이되지 않았습니다. '- (void) viewDidAppear : (BOOL) animated'가 호출 될 때까지 팝업이 이미 전체 크기로 표시되어 있으므로 크기 조정을 미리 수행해야합니다. – cshavit

+0

popover를 표시하기 전에 컨텐츠 크기를 설정하십시오. 'viewDidAppear :'메소드에서 크기 조정 코드를 제거하십시오. –

+0

고마워요. 'viewDidAppear :'에서'viewWillAppear :'로 코드를 옮겼습니다. 나는'[super viewWillAppear : animated]; 줄 앞에 그리고 그 다음 줄 뒤에 넣으려고했다. 두 경우 모두 크기 조정이 전혀 발생하지 않았습니다. 'setPopoverContentSize : (CGSize) size animated : (BOOL) animated' 은'viewWillAppear :'내부에서 호출 될 때 아무런 영향을 미치지 않는 것 같습니다. 마찬가지로,'viewWillAppear :'에 직접 컨트롤러의 크기를 설정하는 것은'ctrl.popoverContentSize = size;'처럼 효과가 없습니다. popover가 표시되기 전에 크기를 조정할 방법을 찾을 수 없으므로 분명히 놓친 것입니다. 나는 후에 크기를 조정할 수 있습니다. – cshavit

관련 문제