2013-08-27 2 views
0

필자는 원하는대로 작동하는 일부 textviews가있는보기가 있습니다. 가로 또는 세로의 같은 오른쪽 여백으로 확장됩니다.iOS textviews가 가로 스크롤보기에서 확장되지 않습니다.

최근에는 일반보기를 scrollview로 변경해 보았습니다. 하지만 필자는 한때 이러한 텍스트 뷰를 확장하는 데 운이 없었습니다. 가로 모드에서는 모든 것이 세로 폰과 같은 너비로 왼쪽에 모이게됩니다.

다음은 몇 가지 코드입니다.

- (void)viewDidLoad { 
    CGSize screen = [self handleScreenOrientation]; 
    [(UIScrollView *)self.view setContentSize:CGSizeMake(screen.width, screen.height)]; 
} 

- (CGSize)handleScreenOrientation { 
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
    CGRect screenRect = [[UIScreen mainScreen] bounds]; 

    if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown) { 
     return CGSizeMake(screenRect.size.width, screenRect.size.height); 
    } 
    else { 
     return CGSizeMake(screenRect.size.height, screenRect.size.width); 
    } 
} 

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    CGSize screen = [self handleScreenOrientation:toInterfaceOrientation]; 
    UIScrollView *scrollView = (UIScrollView *)self.view; 
    scrollView.frame = CGRectMake(0, 0, screen.width, screen.height); 
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width, scrollView.frame.size.height); 
    [scrollView setNeedsDisplay]; 
} 

전달 배향 메소드 handleScreenOrientation 그냥 통과 방향이 아닌 상태 바의 현재의 방향을 사용없이 파라미터/w 것과 동일하다.

내가 확인한 내 scrollview autviewize subviews 설정되어 있습니다.

어떤 아이디어라도 높이 평가할 수 있습니다. 감사.

업데이트 : 내가있는 viewDidLoad 및 willrotatetointerfaceorientation하는

self.view.autoresizesSubviews = true; 

for (UIView *view in self.view.subviews) { 
    view.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth; 
} 

을 추가했습니다. 변경 없음.

+0

autoresizingMasks를 설정해야하는 것처럼 들립니다. – Wienke

+0

내 모든 제약 조건과 겹침 선은 수퍼 뷰가보기에 불과했을 때 이전과 동일합니다. scrollview이기 때문에 행동이 바뀌 었습니다. – erosebe

+0

추가 된 코드로 autoresizingMask의 모든 기반을 확실히 덮었습니다. 더 자세히 보시면 아래에 게시 할 답변을 볼 수 있습니다. – Wienke

답변

0

나는 당신이 scrollView의 contentSize에 대한 변경을 강제함으로써 autoresizingMasks를 오버 라이딩한다고 생각한다. screenSize가 항상 세로 방향이므로 가로 방향의 치수를 반대로 바꾸려면 앞에 사용할 방향을 결정한 후 장치가 실제로 회전합니다. 따라서 scrollView에서 가로 방향으로 세로 크기를 유지해야합니다.

자동 크기 조절 루틴을 유지하고 willRotateToInterfaceOrientation 루틴을 버립니다. 지금 작동합니까?

그렇지 않으면 willRotate 코드를 * did * RotateToInterfaceOrientation에 넣으십시오.


또 다른 아이디어 :

내가 viewDidLoad에 당신이있는 UIScrollView에 컨테이너보기 (self.view)을 주조 알 수 있습니다. 컨테이너 뷰를 일반 UIView로두고 UIScrollView를 하위 뷰로 추가 한 다음 scrollview에 textviews를 추가하는 것이 더 나은지 궁금합니다.

여기 왼쪽 된 필드에있을 수도 있지만 container-view 레벨에서 직접 scrollview를 사용한 적이 없으며 이것이 문제 일 수 있는지 궁금합니다.

+0

흠 ... 제안에 감사드립니다. 그러나 나는 그것을 생산적으로 바꾸지 못했습니다. willRotateToInterfaceOrientation을 didRotateToInterfaceOrientation으로 변경하고 handleScreenOrientation의 매개 변수없는 버전으로 전환했지만 아무런 변화가 발생하지 않았습니다. 나는 물건을 버리고 물건을 가져가는 많은 조합을 시도했지만 모두 효과가 없었습니다. – erosebe

+0

나는 정말로 필요한 것은 재구성 작업을 수행하지 않고도 autoresizeMasks라고 생각합니다. 테스트로 할 수있는 한 가지 방법은 scrollView의 backgroundColor를 무언가 (예 : [UIColor red])로 설정하여 스크롤 뷰인지 또는 조정을 거부하는 텍스트 뷰인지 확인할 수 있습니다. – Wienke

+0

예. 나는 그 것을 실제로 뒤로했다. scrollview의 bg가 빨간색이면 전체 화면의 배경이 항상 빨간색입니다. 나는 그것이 내가 원하는대로하고 있다는 것을 의미한다고 생각하지만 부모보기가 없기 때문에 내가 알지 못했던 기본 행동이 없었습니다. – erosebe

관련 문제