gpt4 book ai didi

iphone - 向 UITableVIew headerview 添加约束

转载 作者:可可西里 更新时间:2023-11-01 04:16:05 28 4
gpt4 key购买 nike

所以我是新手。

我有一个 nib 文件,其中包含多个兄弟 View 。 ViewController 的 View 包含一个 tableView,我有另一个 View 将被添加到 tableHeaderView(我们称之为 self.tableHeaderView)。

我面临的问题是我想根据特定条件调整 self.tableHeaderView 的大小。我已经为所有 UI 元素添加了约束,但无论出于何种原因,我都无法通过 Nib 向 self.tableHeaderView 添加高度约束。

我尝试以编程方式更改 self.tableHeaderView 的框架,但是当我在模拟器中运行代码时这没有任何效果,这是有道理的,因为如果我使用自动布局,它应该忽略框架更改。

我尝试以编程方式添加高度限制,但它崩溃了。

这是我要添加高度限制的代码。

    [self.tableHeaderView addConstraint:[NSLayoutConstraint constraintWithItem:self.tableHeaderView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:107.0f]];

我得到的异常:*** 断言失败 -[UITableView layoutSublayersOfLayer:],/SourceCache/UIKit_Sim/UIKit-2903.2/UIView.m:8536


* 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“执行 -layoutSubviews 后仍需要自动布局。 UITableView的-layoutSubviews的实现需要调用super.'*

最坏的情况是我将添加另一个具有第二个高度的同级 View 并复制 UI 元素,但我想避免这种情况。

Nib file structure

编辑 1:当我有这个时我得到那个异常 self.topicHeaderView.translatesAutoresizingMaskIntoConstraints = NO;

如果我没有它,我明白了

Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) ( "", "" )

将尝试通过打破约束来恢复

中断 objc_exception_throw 以在调试器中捕获它。中列出的 UIView 的 UIConstraintBasedLayoutDebugging 类别中的方法也可能有帮助。

编辑:2在 4"屏幕上,它看起来不错(红色背景覆盖了整个 tableHeaderView,正如我所期望的那样) 4" Simulator

在 3.5"屏幕上,红色背景(应用于 Nib ,延伸到一定高度,即使我将高度设置为 117.0f。tableHeaderView 内的 UI 元素正确显示)

3.5" screen

底部的蓝线是分隔线,蓝色边框围绕着tableHeaderView。

最佳答案

当您将 View 作为页眉或页脚添加到 TableView 时,您不能在该 View 上使用约束,而只能在其内部使用。此外,该 View 必须位于层次结构的顶部(正如您所拥有的),如果您将它作为 subview 移动到另一个 View ,它将给出相同的错误。

您可以直接在代码中更改 View 的高度,方法是设置具有更改高度的相同框架。这工作正常。

另请记住,在您重新分配 header 之前,此更改不会应用:

tableView.tableHeaderView.frame = ...;
tableView.tableHeaderView = tableView.tableHeaderView;

关于iphone - 向 UITableVIew headerview 添加约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18840419/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com