【问题标题】:Grouped UITableView 35 point / pixel top inset / padding分组 UITableView 35 点/像素顶部插入/填充
【发布时间】:2014-05-14 19:56:11
【问题描述】:

请注意,我将在这个问题中将点称为像素。

我有一个分组 UITableView 有 3 个部分,每个部分都有一个 40 像素高的标题视图。表格视图中的第一个标题似乎被系统赋予了 35 像素的 y 位置。

我尝试过使用 automaticallyAdjustsScrollViewInsets 和其他一些 iOS 7 自动部件,但无济于事。

为什么我的UITableView 内容被插入了 35 个像素?

编辑:我已经看到this answer 和许多其他线程。我有有效的标题和标题高度。此外,将默认值设置为 FLT_MIN、0.01f、1.0f 或 100.0f 并不能解决问题。

这是我的头文件实现:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    UIView *header = (self.headerViews.count > section ? self.headerViews[section] : nil);
    return (header.viewHeight ? : FLT_MIN);
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *header = (self.headerViews.count > section ? self.headerViews[section] : nil);
    return (header.viewHeight ? header : nil);
}

我也在设置:

- (BOOL)automaticallyAdjustsScrollViewInsets{return NO;}

[self setSectionHeaderHeight:FLT_MIN];

【问题讨论】:

  • 为什么将点称为像素?如果你的意思是“点”,就说“点”。这种区别是有原因的。
  • 你看过这个question吗?
  • @Michael 因为像素被更广泛地理解和搜索。
  • hmm,不了解区别的人无论如何都不应该尝试回答这个问题,恕我直言
  • 你是否也使用了 heightForHeaderInSection 来设置合适的标题高度?

标签: ios objective-c uitableview


【解决方案1】:

好像是这样的:

[self setTableHeaderView:[[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, width, FLT_MIN)]];

在 init 中,selfUITableView,将去掉前 35 个点。

【讨论】:

  • 我可以看到这是如何工作的,而其他人都没有。同样,您的案例特定于VC 内的UITableView,因此涉及contentInsetautomaticallyAdjustsScrollViewInsets 的所有其他解决方案都不起作用,因为当问题在UITableViewController 内部时,它们将针对VC本身。
  • 这是黄金。并不是表的部分标题视图之间存在差异,这不是。这是一个表头。出于某种原因,在 Interface Builder 中经过大量摆弄后,我的一张表将其设置为非零值,我猜是一些 IB 错误。我希望我早点看到这个。谢谢。
【解决方案2】:

是的,当我设置 tableview.tableFooterView 和自定义设置部分标题高度时,我遇到了这个问题,然后第一个部分高度超过 35 点。

然后我添加一个

tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: CGFloat.leastNormalMagnitude))

为我工作。

【讨论】:

    【解决方案3】:

    有多种方法可以解决您遇到的同一问题,因此有多种解决方案。我将尝试列出我所知道的及其相应的解决方案。大部分都是从this question复制过来的。

    UIViewController 中的 UITableView

    这是一个常见的问题,因为他们认为问题与他们的UITableView 有关,而大多数情况下实际上是父母UIViewController

    如果您的VC 嵌入NavigationController 上。如here 所述,您将获得 35 分 y 偏移

    解决方案

    • 在 Xcode 版本 > 5 中 VC 上取消勾选 Attributes Inspector 下的 Extended Edges "Under Top Bars 以移除顶部 UITableView 内容插图。

    • 约束:您的VC 有一个主视图,其中放置了所有其他子视图,包括您的UITableView。您需要确保您的UITableView 中的所有约束明确设置且满足/无歧义

    • 设置self.navigationController.navigationBar.translucent = YES;

    • 设置self.automaticallyAdjustsScrollViewInsets = NO;。也可以通过取消选中视图控制器布局的 Adjust Scroll View Insets 复选框在情节提要上设置此选项。

    • 设置self.edgesForExtendedLayout = UIRectEdgeNone;


    通用 UITableView/UITableViewController

    • 设置tableView.separatorInset = UIEdgeInsetsZero;

    • 设置tableView.contentInset = UIEdgeInsetsMake(-35, 0, 0, 0);注意-35。负数偏移视图。

    • 声明这个方法(也可以用于FooterSection):

    -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
        return CGFLOAT_MIN;
    }
    

    【讨论】:

    • 我需要将标题的高度设置为40.0f,我也不需要插入-20。另外,我没有使用 XIB 或自动布局。至于其余的,这已经全部设置好了,但我仍然有一个35.0f 点插图。但是,这是对其他答案中所有信息的良好融合。
    • 是的,这里复制时我没有更新-20 偏移量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多