当前位置: 首页 > 知识库问答 >
问题:

如何动态设置UIScrollView的内容大小

章乐逸
2023-03-14

我收到了有关用户界面滚动视图的问题

故事是我有一个名为图表视图的UIView,我通过重写方法绘制Rect()自己重新绘制它。绘图的内容是动态生成的。所以直到运行时我才知道它的大小。问题是我如何/在哪里可以动态设置其超级视图(滚动视图)的内容大小?对此有什么想法吗?

    - (void)viewDidLoad
    {
        [super viewDidLoad];

// not this way. it's fixed size.....
        ChartsView *chartsView = [[ChartsView alloc]initWithFrame:CGRectMake(0, 0, 320, 800)]; 

        self.scrollView.contentSize = chartsView.frame.size;

        [self.scrollView addSubview:chartsView];

    }

共有3个答案

亢保赫
2023-03-14

swift (2.0)

@IBOutlet weak var btnLatestButton: UIButton!

override func viewDidLoad() {
    super.viewDidLoad()

    let height = btnLatestButton.frame.size.height
    let pos = btnLatestButton.frame.origin.y
    let sizeOfContent = height + pos + 10
    scrollview.contentSize.height = sizeOfContent

}

当然,以上是当您在滚动视图上只有固定数量的视图时。IOS Rocks方法可用,但对我来说不好,创建了更多的空间,然后我需要。

    let lastView : UIView! = scrollview.subviews.last
    let height = lastView.frame.size.height
    let pos = lastView.frame.origin.y
    let sizeOfContent = height + pos + 10
    scrollview.contentSize.height = sizeOfContent
姜嘉良
2023-03-14

不能100%保证scrollView.subviews数组中的最后一个对象将返回滚动视图中y轴原点最高的对象。子视图数组按Z索引排列(即子视图数组中的最后一个对象将是堆叠最高的对象,并且将是滚动视图的子视图中最顶层的子视图。相反,更准确的方法是使用一个基本的排序函数来遍历子视图,并获得具有最高y坐标原点的对象。

Swift 4

extension UIScrollView {
    func updateContentView() {
        contentSize.height = subviews.sorted(by: { $0.frame.maxY < $1.frame.maxY }).last?.frame.maxY ?? contentSize.height
    }
}

用法(在< code > viewDidLayoutSubviews 中或每当您的内容大小更新时):

myScrollView.updateContentView()
虞华翰
2023-03-14

一个更简单的方法

- (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);
}
 类似资料:
  • 我有一个页面,需要动态创建一个iframe并将其粘贴到页面上的div中。我创建iframe的方式如下: 根据某些条件,我需要:A)将iframe src设置为其他页面,或者B)动态地向iframe添加一些HTML。 我有选项A的罚款,但选项B抛出了安全错误: 在尝试设置HTML之前,是否需要在动态iframe上设置?我怎么会那么做呢?有没有更简单的方法将动态内容附加到动态iframe中? 提前道谢

  • 各位开发人员,我在Interface Builder(Xcode5/iOS 7)中遇到了自动布局的问题。这是非常基本和重要的,所以我认为每个人都应该知道这是如何运作的。如果这是Xcode中的一个bug,那就是一个关键的bug! 因此,每当我有这样的视图层次结构时,我就会遇到麻烦: UIScrollView有坚实的约束,例如,每边50像素(没有问题)。然后我将顶部空间约束添加到UILabel(没问题

  • 我遇到了内容视图高度限制的问题。所有标签都有动态高度,即没有固定高度。我在某个地方读到将高度设置为等于滚动视图高度。 ViewController的高度目前是870px,scrollview的高度是757px。我不知道如何在AutoLayout中设置高度,因为我无法在某一点后滚动。 我首先设置了UIScrollView,然后添加UIView作为UIScroll View的子级,然后添加了2个UII

  • 问题内容: 我一直在环顾四周,无法看到任何快速相关的方法来执行此操作。我试图让我的UIWebViews高度是动态的。我有一个UIWebView,它使用loadHtmlString函数加载数据。事实是,每次我加载具有不同长度的不同字符串时,都会从sqlite数据库加载数据,并且Web视图自然会获得不同的高度。 现在,我需要知道如何将UIWebView设置为正确的高度,以便将我的下一个内容加载到web

  • 运动内容 有关运动内容的更多信息,请参见“运动内容”。 以下运动内容已在 A300 中: 跑步 行走 骑自行车 力量训练 小组练习 其他室内活动 其他户外活动 游泳 在 Flow 网络服务上,您可以添加新运动内容,并将这些内容同步到 A300 上,通过这种方式可以创建一份您经常进行的所有运动的列表。查看Flow 网络服务中的“运动内容”的更多信息。 如果您在第一次训练前已在 Flow 网络服务上编

  • 我有: < li >应该可以在横向和纵向模式下工作的应用程序。 < li >在顶部显示全尺寸滚动视图。 < li >固定宽度和高度的滚动视图中的某些视图。(增加了H和W约束) < li >设置为在滚动视图中在容器中水平居中查看。(根据约束条件添加) 我知道解决这个问题的唯一方法是设置尾随和前导约束。但是对于不同的iPhone(5.5"、4.7"、4"),我需要设置不同的尾随和前导约束。 如何消除此