【问题标题】:UIScrollView setting page size dynamicallyUIScrollView 动态设置页面大小
【发布时间】:2012-08-15 09:27:47
【问题描述】:

我已经对此进行了大量研究,但未能找到解决方案。

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

【问题讨论】:

    标签: iphone ios uiview uiscrollview


    【解决方案1】:

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

    contentSize 是滚动视图内所有子视图的虚拟边界框的大小。这仅用于限制滚动视图将滚动多远,以及分页,它将分页多少次,即contentSize.width / bounds.size.width

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 使用此方法,我无法更改单个页面的内容大小。此方法使所有页面的内容大小恒定1,恒定2。我希望page1 和page2 具有不同的内容大小。所以,我不能用这个方法。
      【解决方案3】:

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

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

      当您将内容添加到UIScrollView 时,您可以使用它们为当前内容设置UIScrollviewcontentSize

      【讨论】:

        【解决方案4】:

        是的。您可以通过

        动态设置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

        【讨论】:

        • 这也不是我要找的。看看一个示例应用程序,所有页面都有相同的大小。scroller.contentSize = CGSizeMake(1650, 2000);这是我现在使用的,但正如你想象的那样,如果内容大小小于 1650,2000,这是最常见的情况,用户将看到屏幕底部的白色空白区域。你明白我的意思吗?
        • oh.. 最好确保将 contentSize 设置为始终大于 scrollView 框架。否则请在设置 contentSize 之前再次重置 scrollView 框架(小于 contentSize)。请这样做,方法 scrollRectToVisible 方法呢??
        【解决方案5】:

        试试这个。

        - (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);
        }
        

        【讨论】:

          猜你喜欢
          • 2016-12-01
          • 2012-05-18
          • 1970-01-01
          • 2015-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-09
          相关资源
          最近更新 更多