我正在以编程方式添加滚动,但由于某种原因它没有从一开始就开始

Posted

技术标签:

【中文标题】我正在以编程方式添加滚动,但由于某种原因它没有从一开始就开始【英文标题】:I am adding a scroll programatically, but for some reason it doesn't start at the start 【发布时间】:2014-03-20 10:56:02 【问题描述】:

我正在以编程方式添加一个滚动,但由于某种原因它没有从一开始就开始。

self.backgroundColor = [UIColor redColor];
self.scrollView = [[UIScrollView alloc]initWithFrame:self.frame];
self.scrollView.backgroundColor = [UIColor greenColor];
[self addSubview:self.scrollView];
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width, self.scrollView.frame.size.height);

这里有一些日志:

NSLog(@"contentOffset - %@",NSStringFromCGPoint(self.scrollView.contentOffset));
NSLog(@"contentSize - %@",NSStringFromCGSize(self.scrollView.contentSize));
NSLog(@"contentInset - %@",NSStringFromUIEdgeInsets(self.scrollView.contentInset));
NSLog(@"frame - %@",NSStringFromCGRect(self.scrollView.frame));

2014-03-20 12:53:56.356 contentOffset - 0, 0
2014-03-20 12:53:56.357 contentSize - 320, 423
2014-03-20 12:53:56.357 contentInset - 0, 0, 0, 0
2014-03-20 12:53:56.358 frame - 0, 156, 320, 423
2014-03-20 12:53:56.360 contentOffset - 0, 0
2014-03-20 12:53:56.360 contentSize - 320, 423
2014-03-20 12:53:56.361 contentInset - 0, 0, 0, 0
2014-03-20 12:53:56.361 frame - 0, 156, 320, 423

【问题讨论】:

什么是 NSLog(@"%@", NSStringFromCGRect(self.frame)) ? 而不是 self.frame 尝试 self.bounds 【参考方案1】:

试试self.bounds,而不是self.frame

Frame 是相对于 superview 的位置。但边界从 (0,0) 开始

【讨论】:

【参考方案2】:

我猜是这样的:

self.scrollView = [[UIScrollView alloc]initWithFrame:self.frame];

应该是:

self.scrollView = [[UIScrollView alloc]initWithFrame:self.bounds];

注意您的打印输出是这样的:frame - 0, 156, 320, 423

这意味着您的滚动视图不是从顶部开始,而是从 156px 开始

self.bounds 将始终包含 0, 0, <view-width>, <view-height>

【讨论】:

【参考方案3】:

可能是您的父控制器的框架不正确,只需使用

进行检查
NSLog(@"%@", NSStringFromCGRect(self.frame));

然后看看控制台显示什么?

如果不合适就手动设置scrollView的frame,

self.scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0,0, 320, self.frame.size.height)];

【讨论】:

这应该是评论而不是答案,请删除它或添加可以回答问题的内容 @SimonMcLoughlin - 现在检查.. 这不是评论 :) 谢谢队友 :)

以上是关于我正在以编程方式添加滚动,但由于某种原因它没有从一开始就开始的主要内容,如果未能解决你的问题,请参考以下文章

Jquery动画没有正确检测滚动

使用布局约束以编程方式将视图添加到滚动视图

尝试以编程方式添加视图时应用程序崩溃

为啥我以编程方式创建的视图会忽略其约束?

试图找到一个数字的日志,但由于某种原因它不起作用

以编程方式具有自动布局的滚动视图