3

我遇到了一个问题,即剪辑子视图无法始终如一地工作(或者可能,UIView 调整大小不起作用)。这是场景:

  • 我有一个 UIView(行上方的部分)。实际尺寸较大以容纳搜索栏。我基本上在 viewDidLoad 上调整它的大小。
  • 单击文本字段时,UIView 会展开并显示搜索栏
  • 搜索后,我折叠了 UIView,但发现 UIView 在某些情况下没有折叠(见第一张图片)。如果我不隐藏搜索栏,它也会保留。

出现此问题是否有任何原因?我仍在尝试调试并查看是否有任何可能导致此问题的原因(因为某些内容可能会重置为原始大小)。看起来一切都正确调整了大小,因为即使结果表也正确移动了。在预期的调整大小之后,一定有其他东西触发了它。任何指针表示赞赏。我只做了5天的iOS开发,所以我还没有意识到很多事情。

- (void)showAddressField
{
    CGRect headerFrame = self.searchHeaderView.frame;
    headerFrame.size.height = headerHeight + adjustmentSize;
    self.searchHeaderView.frame = headerFrame;

    CGRect tableFrame = resultTableView.frame;
    tableFrame.size.height = tableHeight - adjustmentSize;
    tableFrame.origin.y = headerFrame.size.height + statusBarHeight;
    resultTableView.frame = tableFrame;

    [self renderHeaderBorder:headerFrame.size.height - 1];
}

- (void)hideAddressField
{    
   CGRect headerFrame = self.searchHeaderView.frame;
   headerFrame.size.height = headerHeight;
   self.searchHeaderView.frame = headerFrame;

   CGRect tableFrame = resultTableView.frame;
   tableFrame.size.height = tableHeight;
   tableFrame.origin.y = headerHeight + statusBarHeight;
   resultTableView.frame = tableFrame;

   [self renderHeaderBorder:headerHeight - 1];

}

已编辑

SearchHeaderView 只是一个 UIView,它是主视图的子视图。它不是表头。我发现如果我在表头中放置一个搜索栏,它的行为非常不可预测,所以我有一个包含搜索部分的 UIView 并且在它的正下方有一个 UITableView。

抱歉,因为我只有一个多星期的时间来从头开始开发一个相当庞大的应用程序,所以我没有时间等待。我已经稍微改变了我的方法,但即使在赏金到期后,我仍然会奖励积分。我试图了解与布局有关的所有内容,因为这几乎是我在 iOS 应用程序开发中无法完全弄清楚的唯一事情。

UIView 剪辑子视图问题 UIView 展开

4

2 回答 2

0

首先,框架已经相对于封闭窗口。您不应该考虑状态栏的高度(假设它指的是屏幕顶部的 20px 区域)。

我过去发现您可能需要在视图控制器中实现“layoutSubviews”并在那里计算视图的框架。这取决于您调整大小的蒙版/是否启用了自动布局。

正如其他人所说,更多的代码会有所帮助......或者至少是 nib/xib 的相关部分。

于 2013-09-08T06:37:53.800 回答
0

如果搜索栏在表视图标题中,请尝试将标题视图重新分配给表视图:

[tableView setTableHeaderView:self.searchHeaderView];

如果是节标题,请务必更新委托的值

– tableView:heightForHeaderInSection:
– tableView:viewForHeaderInSection:

否则,请发布更多关于如何初始化 searchHeaderView 并将其添加到表中的代码。

希望这可以帮助!

于 2013-09-05T15:42:37.620 回答