2009-12-03 7 views
0

상단에서 스크롤하지 않으면 페이지가로드되는 동안 모바일 사파리가 화면 상단에 고정 된 상태에서 모바일 사파리를 유지하는 것과 비슷한 작업을 수행하려는 경우 나머지 콘텐츠와 함께 스크롤합니다.모바일 사파리의 URL 표시 줄처럼 UIScrollView의 하위 뷰를 앵커하려면 어떻게해야합니까?

그러나 나는 반대가 일어나길 원합니다. 아래쪽으로 스크롤하면 특정 하위 뷰가 화면에서 벗어나기를 원하지만 맨 위로 스크롤하면 하위 뷰가 화면 상단에 고정되어 나머지 내용은 아래로 계속 스크롤됩니다. 나는 우리가 맨 위로 스크롤 할 때 하위 뷰가 슈퍼 뷰를 변경하는 뷰 계층 구조로 몇 가지 속임수를 쓸 수 있다고 생각하지만, 이보다 더 우아한 솔루션이 있는지 궁금합니다.

답변

1

내 자신의 질문에 대한 답이 너무 늦었지만 어떻게 할 수 있었는지 밝혀 냈습니다.

UIScrollView를 서브 클래스 화하고 scrollSubviews 메서드를 구현했습니다.이 메서드는 스크롤 위치가 변경 될 때마다 호출됩니다. 여기, 당신이해야 할 모든 당신이 앵커와 같은 것을하고 싶지보기를 식별 있습니다 :

- (void) layoutSubviews { 
    [super layoutSubviews]; 

    CGFloat x = 0.0f; 
    CGFloat y = MIN(self.contentOffset.y,0.0f); 

    anchorview.frame = CGRectMake(x,y,anchorview.frame.size.width,anchorview.frame.size.height); 
} 

당신은 대신에 남아있는의 (상단지나 이동하면 상단에 머물 수있는 고정 된보기를 원하는 경우 scrollview를 기준으로 같은 위치), 뷰의 맨 위로 스크롤 할 때 콘텐츠 오프셋의 y 좌표가 0보다 작으므로이 작업 만 수행됩니다.

0

UITableView 섹션 헤더는 이미 일반 테이블에서이 작업을 수행하므로 이러한 동작을 활용할 수 있습니다.

+0

나는 반대의 방식으로 행동하지만 나는 그것을 원한다. 나는 정상을 지나서 스크롤 할 때 그 자체로 앵커를하고 싶다. 그렇지 않으면, 테이블 뷰 헤더가 평범한 테이블에서 작동하기 때문에 그렇지 않다. 또한 나는 그것을 어느 쪽의 스타일의 테이블 뷰에서도 작동시키고 싶다. – Kevlar

관련 문제