2012-08-15 161 views
4

我已经做了相当多的研究,但一直没有找到解决方案。UIScrollView动态设置页面大小

我有一个的UIScrollView称为scrollView的UIView内的。我在pagingEnabled模式下使用这个scrollView。在scrollView里面,我有3个以编程方式创建的不同视图。在这3种不同的视图里面,我有一堆东西(UILabel,UITextView等)。所有的视图内容都是动态的,并在运行时确定。所以,我真的不知道scrollView.contentSize。如果我给这个scrollView的内容大小,有时,当用户向下滚动时,屏幕底部有一个白色的空白屏幕。我的问题是:Can i set the content size dynamically for each single page of this scrollView?例如,对于第1页:

self.scrollViewNews.contentSize = CGSizeMake(constant1,constant2);

并设置别的东西2页为好。

回答

3

我想你对contentSize与分页大小感到困惑。分页大小始终是scrollView界限的大小,并且不是您可以另外设置的属性。也就是说,当你向左/向右滑动时,它将按照滚动视图的宽度“翻页”。

contentSize是滚动视图中所有子视图的虚拟边界框的大小。这仅用于限制滚动视图滚动的距离,并且对于分页,页面将多少次,即contentSize.width/bounds.size.width

假设scrollView未放大/缩小(zoomScale = 1.0),则需要在虚拟“页面边界”上定位和调整子视图的大小。他们可以占据整个页面边界(大小与scrollview.bounds匹配)或插入。如果您的某些内容比较大/较小,那么您必须决定是否要更改内容的比例或在页面范围内上下调整大小。

+0

我当然感到困惑。谢谢。你清除了。 – limon 2012-08-15 14:37:26

1

是的,你可以动态设置scrollView的内容大小。您也可以使用此方法:

self.scrollViewNews.contentSize = CGSizeMake(constant1,constant2); 

这种方法没有错。您将看到底部的空白区域,因为您将scrollView的contentSize的高度设置为比其内容更大的值。这是问题。根据内容调整高度,空白空间将会消失。

+2

使用这种方法,我不能够改变内容大小单个page.This方法,使所有的页面的内容大小CONSTANT1的,constant2.I要1和Page 2有不同的内容大小。所以,我不能使用这种方法。 – limon 2012-08-15 09:37:19

0

是的。你可以,如果你使用的是pagingEnabled = YES为您滚动型

通过

scroller.contentSize = CGSizeMake(1650, 2000); 

您可以使用下面的属性设置动态帧

[urScrollView scrollRectToVisible:frame animated:YES]; 

每个页面动态地设置了滚动大小

以下UIScrollViewDelegate代表将调整页面和内容

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ 

    int page = urScrollView.contentOffset.x/urScrollView.frame.size.width; 
    pageControl.currentPage = page; 
} 

//pager action 
- (IBAction)changePage:(id)sender{ 

    int page = pageControl.currentPage; 
    CGRect frame = urScrollView.frame; 
    frame.origin.x = frame.size.width * page; 
    frame.origin.y = 0; 
    [urScrollView scrollRectToVisible:frame animated:YES]; 
} 

请看看这个sample app

+0

这不是我正在寻找任何一个。看看示例应用程序,所有的页面都有相同的size.scroller.contentSize = CGSizeMake(1650,2000);这是我现在使用的内容,但正如你想象的那样,如果内容大小小于1650,2000这是最多情况下,用户将看到屏幕底部的白色空白空间。你明白我的意思吗? – limon 2012-08-15 10:07:14

+0

哦..最好确保设置contentSize始终大于scrollView框架。否则,请在重新设置contentSize之前重新设置scrollView Frame(小于contentSize)。请做这个和scrollRectToVisible方法的方法呢? – 2012-08-15 11:03:01

1

请尝试从当前内容中获取实际内容大小。

内容必须是来自UIView的一些继承类,它具有frame.size.widthframe.size.height属性。

您可以使用这些设置你UIScrollviewcontentSize对当时的当前内容当您添加内容到UIScrollView

0

试试这个。

- (void)viewDidLoad 
{ 
    float sizeOfContent = 0; 
    UIView *lLast = [scrollView.subviews lastObject]; 
    NSInteger wd = lLast.frame.origin.y; 
    NSInteger ht = lLast.frame.size.height; 

    sizeOfContent = wd+ht; 

    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width, sizeOfContent); 
}