UIScrollView动态设置页面大小

时间:2012-08-15 09:27:48

标签: iphone ios uiview uiscrollview

我已经做了很多调查,但找不到解决办法。

我在 UIView 中有一个名为scrollView UIScrollView 。我在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页设置其他内容。

5 个答案:

答案 0 :(得分:3)

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

contentSize是scrollview中所有子视图的虚拟边界框的大小。这仅用于限制滚动视图滚动的距离,以及用于分页的页面覆盖次数,即contentSize.width / bounds.size.width

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

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

内容必须是UIView中的某个继承类,并且具有frame.size.widthframe.size.height属性。

当您将内容添加到contentSize时,您可以使用这些内容为当前内容设置UIScrollview的{​​{1}}。

答案 3 :(得分:0)

呀。您可以通过

动态设置scrollView大小
scroller.contentSize = CGSizeMake(1650, 2000);

您可以使用以下属性为每个页面设置动态框架

[urScrollView scrollRectToVisible:frame animated:YES];

如果您使用 pagingEnabled = 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

答案 4 :(得分: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);
}