【问题标题】:UIView Content Clipping Not Working/UIView Resize Not WorkingUIView 内容剪辑不起作用/UIView 调整大小不起作用
【发布时间】:2013-08-30 21:40:11
【问题描述】:

我遇到了一个问题,即剪辑子视图无法始终如一地工作(或者可能,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 的 frame、bounds 和 center 属性的细节,放置和移动你的视图可能会有点棘手。这篇文章提供了一个快速介绍以及一个有用的类别与他们合作”bynomial.com/blog/?p=24
  • @juminoz - 粘贴 3 个 sn-ps 代码。 1)在第一个快照中初始化 UI 视图的代码 2)在第二个快照中使它变大的代码 3)使它变小但在搜索后实际上不起作用的代码..我会看看我是否可以复制这个问题..跨度>
  • 能否请您发布更多代码以便我为您提供帮助?什么是 searchHeaderView、headerHeight、statusBarHeight 和 renderHeaderBorder?
  • 这是 UITableView 标头吗?如果是这样,请确保在 heightForHeader 委托中正确调整 headerView 高度。如果没有,请发布更多代码或只是告诉您期望发生的事情。

标签: iphone ios objective-c uiview resize


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    [tableView setTableHeaderView:self.searchHeaderView];
    

    如果是section header,一定要更新delegate的值

    – tableView:heightForHeaderInSection:
    – tableView:viewForHeaderInSection:
    

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

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      • 2012-01-13
      • 1970-01-01
      相关资源
      最近更新 更多