我已经在这个问题上苦苦挣扎了几天,我似乎无法在网上找到任何具体的解决方案,所以就在这里......
场景很简单:我希望表格视图在滚动视图中展开(即不可滚动),因此我需要在滚动视图中调整视图大小和移动视图。通过对 UIScrollView 进行子类化并重新实现 layoutSubviews 方法(见下文),我已经很容易实现这一点。
layoutSubViews 的实现:
- (void) layoutSubviews
{
[super layoutSubviews];
//Resize the UITableView containing all the rows (i.e. it should not scroll within the tableview)
UITableView *bt = [self.subviews objectAtIndex:0];
//1 - Set the height of the table cells
//2 - Calculate the total height for the tableview (i.e.: numberOfRows*rowHeight)
bt.frame = CGRectMake(bt.frame.origin.x, bt.frame.origin.y, bt.frame.size.width, ([bt numberOfRowsInSection:0]*bt.rowHeight));
//Move down the note text view, so that it don't overlaps the table.
UITextView *note = [self.subviews objectAtIndex:1];
note.frame = CGRectMake(note.frame.origin.x, (bt.frame.origin.y + bt.frame.size.height)+15, note.frame.size.width, note.frame.size.height);
//Set the content size to the scroll view.
//Note: If the note is hidden, then we should not include it (the same goes for the padding between note and table)
[self setContentSize: CGSizeMake(self.contentSize.width, bt.frame.size.height + note.frame.size.height)];
UIEdgeInsets insets = UIEdgeInsetsMake(0.0f, 0.0f, /*padding@bottom*/50.0f, 0.0f);
[self setContentInset:insets];
[self setScrollIndicatorInsets:insets];
}
上面的实现解决了我的问题并完美呈现。试着把它想象成一个配方,其中表格视图中的每一行都是一种成分——这就是我的目标。
我的应用程序正在使用 UITabBar 并且一切都呈现并表现良好,除了我在滚动视图中向下滚动一点然后切换到另一个选项卡并返回的情况。然后滚动视图以某种方式被更改,并且不再可能滚动到顶部(取决于您在切换选项卡之前向下滚动了多少)并且也呈现出有些奇怪。
第 1 步: Step1.png(参见下面的 URL)
向下滚动以能够看到展开的表格视图下方的文本视图
第 2 步: step2-switched-back.png(参见下面的 URL)
切换到第二个选项卡并返回到第一个,导致奇怪的渲染行为和滚动行为,其中不再可能通过滚动滚动视图到达 tableview 中的第一行。
我创建了一个示例项目,因为我相信代码自己会说话,我希望那里的人可以看穿它并指出我是否做错了什么,或者是否有任何方法可以解决这个问题。 项目和屏幕截图可在: http ://eddiex.se/tmp/demo/
提前致谢!