2

UIViewこのスキームによると、 scrollView のサブビューであるのサブビューとして textView があります。

-UIScrollView *scrollView
   -UIView *containerView
       -UITextView *textView
       -MKMapView *mapView
       -UIImageView *imageView

回転中に問題が発生しました。縦から横への移行時に TextView が短縮され、回転前に表示されていたテキストの一部が表示されなくなりました。逆に、横向きから縦向きの作品まで。textView は完全にコードで作成され、IBOutlet はありません。

UITextView高さは可変で、 contentSize は次のviewDidLoadように設定されます。

 - (void)viewDidLoad
 {
       [super viewDidLoad];
       //....
       self.textView = [[UITextView alloc]init];
       self.textView.backgroundColor =[UIColor clearColor];

       CGRect frame;
       frame = self.textView.frame;
       frame.size.height= [self.textView contentSize].height;
       [self.textView setContentSize:self.textView.contentSize];
       self.textView.frame = frame;
       NSLog(@"The contentSize of TextView is %@",NSStringFromCGSize 
                                                (self.textView.contentSize));

      //The contentSize of TextView is {0, 161032}
      //........


    }

次のwillRotateToInterfaceOrientation:durationようになります。

-(void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

    if(deviceOrientation == UIInterfaceOrientationPortrait || deviceOrientation== UIInterfaceOrientationPortraitUpsideDown) {
        CGSize containerSize = CGSizeMake(768, 5000);

        self.scrollView.contentSize = containerSize;
        self.containerView.frame = CGRectMake(0, 0, 768, 5000);

        [self layoutPortrait];
    }
    else if (deviceOrientation== UIInterfaceOrientationLandscapeRight){
        CGSize containerSize = CGSizeMake(1004, 5000);

        self.scrollView.contentSize = containerSize;
        self.containerView.frame = CGRectMake(0, 0, 1024, 5000);

        [self layoutLandscape];
    }
    else if (deviceOrientation==UIInterfaceOrientationLandscapeLeft){
        CGSize containerSize = CGSizeMake(1004, 5000);

        self.scrollView.contentSize = containerSize;
        self.containerView.frame = CGRectMake(0, 0, 1024, 5000);

        [self layoutLandscape];
    }
}

フレームの回転を処理する 2 つのメソッドは次のとおりです。

 -(void) layoutPortrait{
        //...
        NSLog(@"the height of textView è %f", self.textView.contentSize.height);
        //the height of textView è 161032.000000

      self.textView.frame =CGRectMake(56, 490, self.viewImages.frame.size.width, self.textView.contentSize.height);
       //.....
 }
 -(void) layoutLandscape{
       //......
      NSLog(@"The height of textView è %f", self.textView.contentSize.height); 
      /*The height of textView è 2872.000000 
        (This after rotation from portrait to landscape)*/

      self.textView.frame = CGRectMake(170, 495, self.viewImages.frame.size.width, self.textView.contentSize.height);
      //......
 }

回転中に textView の高さを固定したままにしたい。UIImageView と MKMapView で動作します。

4

1 に答える 1

2

これを試して:

  • viewDidLoad で、init の後に次の行を追加します。

    self.textView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth;

  • [フレームの回転方法を処理する] で、contentSize をフレームに変更します。

    -(void) layoutPortrait{
        //...
        NSLog(@"the height of textView è %f", self.textView.contentSize.height);
        //the height of textView è 161032.000000
    
        self.textView.frame =CGRectMake(56, 490, self.viewImages.frame.size.width, self.textView.frame.height);
        //.....
    }
    -(void) layoutLandscape{
        //......
        NSLog(@"The height of textView è %f", self.textView.contentSize.height); 
        /*The height of textView è 2872.000000 
        (This after rotation from portrait to landscape)*/
    
        self.textView.frame = CGRectMake(170, 495, self.viewImages.frame.size.width, self.textView.frame.height);
        //......
    }
    

それはうまくいくはずです(私はWindowsにいるので、試すことはできません)

于 2012-12-19T18:06:41.677 に答える