2014-05-20 3 views
0

사용자보기에 응답하여 서브 뷰의 프레임을 동적으로 변경해야하는보기가 있습니다. 뷰가로드 될 때, 나는 그것의 서브 뷰는 다음과 같이 초기화 : 다음iOS 앱에서 서브 뷰 프레임을 동적으로 변경하기

if (self.firstSubview == nil) { 
    NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"FirstSubView" owner:self options:nil]; 
    for (UIView *view in views) { 
     self.firstSubview = view; 
    } 
} 

를 실행 한 다음, 나는 서브 뷰의 프레임을 수정할 때

일단 초기화
[self.view addSubview:self.firstSubview]; 

, 나는 같은 것을 할 :

self.firstSubview.frame = CGRectMake(0, 80, self.firstSubview.frame.size.width, 200); 

내가하고 싶은 것은 사용자가 버튼을 탭했을 때 서브 뷰의 Y 좌표와 높이를 조정하고 사용자가 버튼을 다시 탭하면 서브 뷰의 원래 프레임을 다시 가져 오는 것입니다. 그러나 때로는 이것이 작동하지 않는 것을 발견하고, Y 좌표와 높이가 항상 CGRectMake 함수에서 설정 한 것처럼 설정되지 않는 것 같습니다. 함수가 절대 값을 가져 가지 않는 것처럼 보입니다. 마지막 프레임의 값에 의존합니다 ...이 함수 호출 후에 프레임이 항상 Y = 80 좌표를 갖는 것처럼 보입니다.

어쩌면 나는이 작품의 방식을 오해하고있다.보기의 nib 파일에서 상단 및 하단 막대를 Simulated Metrics에 설정 했으므로보기의 높이가 막대와 (0,0) 좌표는 위쪽 막대 바로 아래 왼쪽 상단이어야합니다. 내가 빠진 것이 있습니까? 다시 초기화해야 프레임을 바꿀 때마다 서브 뷰를 다시 추가해야합니까? 아니면 프레임의 변경 사항을 적용하기 위해해야 ​​할 일이 있습니까? 사전에

감사

+0

없음 각 시간에 서브 뷰를 다시 초기화 안 이것은 당신이 여기에 간단한 방법은, 원하는 정말 있다면? 귀하의 하위보기에 nib 파일을 사용합니까? 시뮬레이션 된 측정 항목도 포함되어 있습니까? – streem

+0

예, 시뮬레이션 된 메트릭 세트가없는 다른 'nib'파일에 내 서브 뷰가 있습니다 ... – AppsDev

답변

0

를위한 당신이 루프 self.firstSubview 후 마지막 하나를해야합니다 있도록 self.firstSubview 속성에 순서대로 배열 뷰에서 각 요소를 설정합니다 게시 루프 .

if (views.count > 0) 
    self.firstSubview = views.lastObject; 

아니면 :

for (id element in views) 
{ 
    if ([element isKindOfClass:[UIView class]]) 
    { 
     self.firstSubview = element; 
     break; 
    } 
} 
관련 문제