0

我已经在这个问题上苦苦挣扎了几天,我似乎无法在网上找到任何具体的解决方案,所以就在这里......

场景很简单:我希望表格视图在滚动视图中展开(即不可滚动),因此我需要在滚动视图中调整视图大小和移动视图。通过对 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/

提前致谢!

4

1 回答 1

0

我现在想出了一个替代解决方案,它可以提供与我的目标相同的渲染,即在 UIScrollView 中扩展 UITableView。

解决方案

我删除了 UIScrollView(Editor->Unembed)并将 UITableView 的大小设置为覆盖整个屏幕(在 UI 编辑器中),并且我在 UI 编辑器中直观地将 UITextFieldView 移动到 UITableView(作为页脚视图)。

扩展表中最后一行下方的微小阴影(渐变视图)也很容易在此解决方案中实现,因为不需要更改;UITableView 的委托实现了 viewForFooterInSection 方法,它返回一个简单的渐变视图。

于 2013-02-24T10:35:04.177 回答