代码改变世界

iOS7下uiscrollview无法滚动

2015-09-08 11:06  唐不坏  阅读(254)  评论(0)    收藏  举报

这个问题网上解决方法主要有4种,但并不是每一种都管用。原因推测和自动布局有关。在autolayout下,会在viewDidAppear之前根据subview的constraint重新计算scrollview的contentsize。 这就是为什么,在viewdidload里面手动设置了contentsize没用。因为在后面,会再重新计算一次,前面手动设置的值会被覆盖掉。 下面列出4种方法,总有1种可以解决问题。

  • 1 将uiscrollview的相关内容写在-(void)viewDidAppear:(BOOL)animated方法下。(不一定成功)
  • 2 取消代码中的自动布局。(比较麻烦)
  • 3 在如下方法中设置uiscrollview的contentSize。(可行)
-(void)viewDidLayoutSubviews
{
self.scrollView.contentSize = CGSizeMake(712,1000);
}

先执行LayoutoutSubviews再执行DidAppear,但有时候放在DidAppear里面就是不行,即方法1不可行(为什么?)。这时候采用此方法。

  • 4 不使用uiscrollview,代码自己实现uiscrollview的功能(可行)
    CGRect r = [[UIScreen mainScreen] applicationFrame];
    
    self.selectfenlei=[[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, r.size.width, r.size.height)];
    self.selectfenlei.contentSize=CGSizeMake(r.size.width, 1000);
    self.selectfenlei.scrollEnabled=YES;
    self.selectfenlei.delegate=self;
    self.selectfenlei.bounces=NO;
    self.selectfenlei.pagingEnabled=YES;
    self.selectfenlei.showsHorizontalScrollIndicator=NO;
    self.selectfenlei.directionalLockEnabled=YES;
    self.selectfenlei.scrollsToTop=NO;
    
    
    [self layoutSubviews];
    //设置页面背景颜色淡灰色
    [self.view setBackgroundColor:[UIColor colorWithRed:235/255.0 green:235/255.0 blue:235/255.0 alpha:100]];
    [self.view addSubview:self.selectfenlei];