UIScorollView滑不到底,底部被遮住,不能滚到最下方

我们在创建UIScorollView时有时会遇到滑不到底的情况,我总结了我发现的问题即解决方法:

  1. UIScorollView的frame设置,被其他view挡着了,常见的是tabbar挡住了,一般就是高度减去tabbar的盖度重新布局。对于这种被遮住的情况,可以先把UIScorollView的frame写的小一些,设置背景色,查看是否被其他view遮住。另外可以通过xcode工具下面有个可以查看布局的页面(这个按钮需要你运行之后才会出来),点击按钮查看view布局,xcode查看看下图:

打开布局视图

打开后界面如下:(有时候打开会报错,显示的就不是下面的界面了,如果打开报错了,那这个看布局的就没用了)这个时候把鼠标放到视图上,然后长按鼠标左右拖动就能从侧面看其布局
打开后正常显示的界面
退出的时候点下面的按钮退出,如下图所示:
退出界面

  1. 如果确定了uiscorollview的frame没有问题,那么比较大的可能是contentSize设小了。这个时候修改contentsize的大小就可以了。需要注意的是:contentsize只设置了大小,其起点默认相对于scorlllview是源点(0,0)开始的(在没有设置contentOffset和contentInset情况下)。 如果你设的contentsize大小是scorollview里控件view的大小,那么里面控件view设置frame时也要从源点(0,0)开始。下面举个例子:
   UIView *view = [[UIView alloc] initWithFrame:CGRectMake(50, 80, 320, 120)];
   view.backgroundColor = [UIColor redColor];
   [self.view addSubview:view];
   NSString * Content =  @"我IEuuebcbsbsbhvsk数控技术\n看看舒克舒克实际上是尽快是会计师那就是那就是那才叫你电脑承诺书可传空\n双录参数拉开窗帘事实上女包是返回是看数据妇女报?\n\r 五月五业务IE余半仙吧VN没下班是门芯板是门芯板本命年不热 试试看后方可首付款上课上课上课试试看看上课上课时加快建设意义我我比你小\n\r必不挠北苍南县并承诺并承诺 ";
   UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 120)];

   UILabel *label = [[UILabel alloc] init];
   label.font =[UIFont systemFontOfSize:14];//不能少这句话,与上边的字大小一致
   //富文本属性
   NSMutableDictionary * dic = [NSMutableDictionary dictionary];
   //字号大小
   dic[NSFontAttributeName] = label.font;
   //段落样式
   NSMutableParagraphStyle *paraStyle = [[NSMutableParagraphStyle alloc] init];
   //行间距
   paraStyle.lineSpacing = 10.0;
   paraStyle.lineBreakMode = NSLineBreakByWordWrapping;
//    paraStyle.alignment =NSTextAlignmentCenter;
   //首行文本缩进
   paraStyle.firstLineHeadIndent = 10.0;
   [paraStyle setHeadIndent:10.0];//除首行外的头缩进
   //文本段落样式
   dic[NSParagraphStyleAttributeName] = paraStyle;
   //字间距(字符串)
   dic[NSKernAttributeName] = @(1);
   //赋值
   label.attributedText = [[NSAttributedString alloc] initWithString:Content attributes:dic];
   label.frame =CGRectMake(0, 0, 330, 100);//这里要计算出label的frame大小,能够完全显示所有字符。
//   label.frame =CGRectMake(30, 30, 330, 100);
   label.text =Content;
   label.numberOfLines = 0;
   [label sizeToFit];
   label.lineBreakMode = NSLineBreakByWordWrapping;
   label.backgroundColor =[UIColor clearColor];
   scrollView.contentSize = label.frame.size;//这里赋值label的frame大小,以支持滚动浏览
   [scrollView addSubview:label];
   [view addSubview:scrollView];

这里我在scorollview里添加了lable,设置contentsize设置为lable的大小,如果我设置lable的frame为CGRectMake(30, 30, 330, 100)而不是CGRectMake(0, 0, 330, 100),,那么最后滑到最下面的时候,就会少30的高度,同样左边也会空出30的距离,导致右边有文字被遮住。
如果有什么问题,欢迎各位大神下方评论指正。
参考链接:
iOS 里 UIScrollView 不能滚动到最下方.

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐