我几天来一直在努力解决这个问题,而且我似乎无法在网上找到任何具体的解决方案,所以这里就是......
场景很简单:我希望在滚动视图中扩展(即不可滚动)表视图,因此我需要调整大小并在滚动视图中移动视图。通过对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(请参阅下面的网址)
向下滚动,以便能够在扩展的tableview下面看到textview
第2步: step2-switched-back.png(请参阅下面的网址)
切换到第二个选项卡并返回到第一个,导致奇怪的渲染行为和滚动行为,通过滚动滚动视图无法再到达tableview中的第一行。
我已经创建了一个示例项目,因为我相信代码可以自行解决,我希望有人可以看到这一点并指出我是否做错了什么或者是否有任何方法可以解决这个问题。 项目&屏幕截图位于: http://eddiex.se/tmp/demo/
提前致谢!
答案 0 :(得分:0)
我现在想出了一个替代解决方案,它将为我提供与在UIScrollView中扩展UITableView的目标相同的渲染。
<强>解决方案强>
我删除了UIScrollView(Editor-&gt; Unembed)并将UITableView的大小设置为覆盖整个屏幕(在UI编辑器中),我在UI编辑器中可视化地将UITextFieldView移动到UITableView(作为页脚视图)
扩展表中最后一行下方的微小阴影(渐变视图)也很容易在此解决方案中实现,因为不需要进行任何更改; UITableView的委托实现了viewForFooterInSection方法,它返回了一个简单的梯度视图。