IOS scrollview在开发中遇到的问题。

来源:互联网 发布:java培训机构哪里好 编辑:程序博客网 时间:2024/06/01 16:26

最近在项目开发的时候在用autolayout的scrollview布局的时候遇到了一些问题。



关于scrollview内部子view约束的设置 上下左右宽高都要设置好,否则会有红色的警告,觉得可以先这样设置好,通过动态修改约束更改布局。

      UIScrollView 有一个 contentSize 属性,其定义了 ScrollView 可滚动内容的大小。在以前用纯代码写的时候,我们会直接对这个属性赋值,定义其大小。但在 Autolayout 下,UIScrollView 的 contentSize 是由其内容的约束来定义的。因此,我们在 ScrollView 里面设置的约束,不仅起到布局内容的作用,同时也起到了定义 ScrollView 可滚动范围的作用。

A.这个时候获取下ScrollView的contentSize和ScrollView的frame,在获取下ScrollView内部子view的frame。

- (IBAction)getsize:(id)sender {

    CGSize sz =_theUIScrollView.contentSize;

    CGRect rc =_scrollViewInsertUIView.frame;

    CGRect rec =_theUIScrollView.frame;

    NSLog(@"theUIScrollView.contentSize%f - %f",sz.width,sz.height);

    NSLog(@"_scrollViewInsertUIView.frame%f - %f",rc.size.width,rc.size.height);

    NSLog(@"_theUIScrollView.frame%f - %f",rec.size.width,rec.size.height);

    return;

}

2016-01-08 12:08:10.954 test[28758:12147261] theUIScrollView.contentSize150.000000 - 250.000000

2016-01-08 12:08:10.954 test[28758:12147261] _scrollViewInsertUIView.frame150.000000 - 250.000000

2016-01-08 12:08:10.955 test[28758:12147261] _theUIScrollView.frame300.000000 - 507.000000

可见UIScrollView contentSize 是由内部子view size 决定的,这时候无法拖拽因为contentSize  <  frame

B.修改ScrollView内部子view的trailing 为300 这时log的结果为

2016-01-08 12:12:38.431 test[28861:12151150] theUIScrollView.contentSize450.000000 - 250.000000

2016-01-08 12:12:38.432 test[28861:12151150] _scrollViewInsertUIView.frame150.000000 - 250.000000

2016-01-08 12:12:38.432 test[28861:12151150] _theUIScrollView.frame300.000000 - 507.000000

可见UIScrollVie内部子view 的左右约束也会影响到contentSize,可以利用这个做一些效果,比如在scrollview的下边放一个空间,并且scrollview子view右边加约束就可以实现抽屉的的效果【用到相关接口 bringSubviewToFront(改变控件层级) sendSubviewToBack】。contentSize  >  frame 可以进行拖拽了。

C.更改scrollview内部子view的宽高,为600,800

2016-01-08 12:53:47.368 test[29497:12177087] theUIScrollView.contentSize600.000000 - 800.000000

2016-01-08 12:53:47.369 test[29497:12177087] _scrollViewInsertUIView.frame600.000000 - 800.000000

2016-01-08 12:53:47.369 test[29497:12177087] _theUIScrollView.frame300.000000 - 507.000000

contentSize  >  frame 可以进行拖拽了。




1 0
原创粉丝点击