2014-05-13 2 views
0

contentOffset.y > 0 때 컬렉션보기 및 테이블보기의 맨 위에 UIView *separatorView을 추가하려고합니다. 나는이 컬렉션을보기에 추가하여 viewDidLayoutSubviews에 추가하고 self.view에 추가했습니다. 그런 다음 일부 스크롤보기 대리자 메서드를 사용하여 표시하고 숨길 수 있습니다. 이것은 잘 작동하지만 테이블 뷰의 경우 동일한 개념을 사용하면 separatorView가 테이블 뷰와 함께 스크롤됩니다. 나는 여전히 separatorView를 self.view에 추가하고 있지만 컬렉션보기와 다르게 동작합니다. I separatorView를 스크롤하지 마십시오. 나는 그것이 정상에 머물길 원한다. 테이블 뷰에서이 작업을 수행하는 방법은 서브 클래스 UIViewController이며 separatorView와 함께 테이블 뷰를 관리하는 것이 맞습니까? 내 현재 UITableViewController 하위 클래스에서 작동하도록 할 수있는 방법이 있습니까?.view UITableViewController 및 UICollectionViewController 속성

기본적으로 self.view은 컬렉션보기가 아닌 테이블보기로 스크롤하는 이유는 무엇입니까? 이것은 모순 된 것처럼 보입니다.

도움 주셔서 감사합니다.

편집 : 아이디어를 보여주기위한 그림이 추가되었습니다. tableViewController 뷰 컨트롤러 loadView 겹쳐 때문에 UITableViewController

+0

동일한 작업을 수행해야합니다. 스크롤 뷰 대리자 메서드를 처리하고 테이블이 스크롤 될 때 하위 뷰의 위치를 ​​계속 업데이트해야합니다. – rmaddy

+0

@maddy 컬렉션 뷰에서 하위 뷰의 위치를 ​​업데이트 할 필요가 없습니다. 뷰를 추가 할 때 한 번 설정하고 스크롤 할 때 절대로 움직이지 않습니다. –

답변

2

self.view

enter image description here

UITableView는이다.

다음 코드를 실행하면 :

2014-05-13 21:19:02.823 Test[28681:60b] <UITableView: 0x109834200; frame = (0 20; 320 548); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x109548f00>; layer = <CALayer: 0x109548c40>; contentOffset: {0, 0}> 

당신이 볼 수 있듯이, self.viewUIView 아니지만 대신이 UITableView입니다 :

UITableViewController *tableViewController = [[UITableViewController alloc] init]; 

NSLog(@"%@",tableViewController.view); 

을 다음과 같은 콘솔 출력을 얻을 것입니다. 있는 tableView와 분리보기 스크롤 때문에 전화 :

[self.view addSubview:separatorView]; 

정확히 동일 전화로 :

[self.tableView addSubview:separatorView]; 

당신이이 추가 될 필요가 고정 된 위치를 유지하기 위해 분리를 원하는 경우 tableView/collectionView의 수퍼 뷰이며 스크롤하는 뷰 자체는 아닙니다.

UICollectionViewController에서 이런 현상이 발생하지 않는 이유는 self.view이 실제로 UICollectionViewControllerWrapperView 개체이기 때문입니다. 이것은 개인 클래스이지만 그 이름으로 판단하면 이라고 가정합니다. UICollectionView을 래핑합니다.

당신이 원하는 것을 달성하는 가장 현명한 방법은 custom container view (child view controller)을 사용하는 것입니다. 이는 UIViewController 서브 클래스와 분리보기 및 tableView/collectionView 컨트롤러를 포함합니다.

하위보기 컨트롤러를 추가하고 싶지 않은 경우 다른 방법은 UIViewController 하위 클래스를 만들고보기 컨트롤러 뷰 내에서 구분보기와 tableView를 하위보기로 추가하는 것입니다. UITableViewController을 사용하면 키보드 모양 등을 위해 tableView의 contentInsets를 자동으로 조정하는 것과 같은 보너스 기능을 사용할 수 없습니다.

+0

내 UICollectionViewController에서'self.view'에 서브 뷰를 추가 할 수 있으며 스크롤되지 않는 것이 이상하게 보입니다. 일관성이 없습니다. 나는 나의 질문에서 말했듯이 나의 해결책이 될 것이라고 생각한다. 테이블 뷰의 프로토콜을 따르는'UIViewController' 서브 클래스에 테이블 뷰와 분리 뷰를 추가하십시오. 귀하의 회신에 감사드립니다. –

+0

더 나은 설명으로 답변을 업데이트했습니다. – liamnichols

+0

아, 감사합니다. 이제 나는 그들이 왜 다르게 행동했는지 이해합니다. 또한 내 접근 방식이 이상적이지 않고 기능을 잃어 버리는 이유를 설명해 주셔서 감사합니다. –

관련 문제