UIScrollView在视图启动时不起作用,但在旋转后仍然有效

时间:2013-04-11 07:38:14

标签: ios uiscrollview

我有一个UIScrollView来显示更长的文字视图,字段和图片列表。在viewDidAppear我正确设置了contentSize,我还将此代码添加到didRotateFromInterfaceOrientation,以便UIScrollView contentSize根据方向调整大小。

问题是当视图第一次出现时UIScrollView没有响应(我无法滚动),但在旋转设备后,didRotateFromInterfaceOrientation中的代码被调用,一切正常。 (如果我以横向方式启动应用程序,我只能滚动一点,看看在纵向模式下通常显示的内容而不是扩展内容 - 忽略我定义的scrollView)

viewDidAppeardidRotateFromInterfaceOrientation中的代码相同,那么为什么scrollView仅在轮换后响应?任何帮助表示赞赏。

两种方法中NSLog消息的输出相同。

@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;


- (void) viewDidAppear:(BOOL)animated{
   //If not an iPad set the scrollview to allow scrolling of view
   if (!([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)) {
      self.scrollView.contentSize= CGSizeMake(self.view.frame.size.width,1000);
      [self.scrollView setUserInteractionEnabled:YES];
   }
   if(self.scrollView.userInteractionEnabled){
    NSLog(@"DEBUG scrollview height : %f",self.scrollView.contentSize.height);
    NSLog(@"DEBUG scrollview width : %f",self.scrollView.contentSize.width);    
   }
}

-(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
//If not an iPad set the scrollview

    if (!([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)) {
        self.scrollView.contentSize= CGSizeMake(self.view.frame.size.width,1000);
    }
    if(self.scrollView.userInteractionEnabled){
       NSLog(@"DEBUG scrollview height : %f",self.scrollView.contentSize.height);
       NSLog(@"DEBUG scrollview width : %f",self.scrollView.contentSize.width);
    }
}

2 个答案:

答案 0 :(得分:3)

您最好更改contentSize中的viewDidLayoutSubviews,在更改方向时显示时会调用。{/ p>

但请不要忘记先致电super

答案 1 :(得分:1)

嘿请试试这段代码我认为你的问题是用这段代码解决的。

尝试使用didRotate方法获取您的设备方向是横向或纵向。并根据它设置框架。

 - (void)viewDidAppear:(BOOL)animated {    
        if (!([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)) {
            self.scrollView.contentSize= CGSizeMake(self.view.frame.size.width,1000);
            [self.scrollView setUserInteractionEnabled:YES];
        } else {
            [_scrollView setScrollEnabled:YES];
            _scrollView.contentSize = CGSizeMake(_scrollView.frame.size.width, 2320);
        }
        if(self.scrollView.userInteractionEnabled){
            NSLog(@"DEBUG scrollview height : %f",self.scrollView.contentSize.height);
            NSLog(@"DEBUG scrollview width : %f",self.scrollView.contentSize.width);
        } }

    -(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
    {
        if (fromInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || fromInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
            [_scrollView setContentSize:CGSizeMake(736, 1000)];

        } else {
            [_scrollView setContentSize:CGSizeMake(414 , 1200)];

        }
    }

快乐编码。