UITextView 仅在 iPad 上无法正确调整大小
UITextView not resizing correctly on iPad only
我有一个静态 UITableView,其中 1 个部分有 3 行。每行包含一个应根据内容调整大小的 UITextView。每个 UITextView 对象都禁用滚动以强制其增长。每个都固定在单元格的 contentView 的所有 4 个边上,没有其他限制。
当我在 iPad(真实或模拟)上 运行 时,无论 UITextView 的内容如何,单元格都会调整为单行文本。当我在调试器中检查视图层次结构时,我看到 UITextView 高度被设置为 27.5,即使内容视图高度为 183.5。这似乎是 UITableViewCellContentView 上限制单元格高度的高度约束的结果。这不是我设置的约束。我的 table 视图控制器没有 heightForRow 或 cellForRow 方法,因为它是静态 table 视图并且对所有内容都使用自动布局。我不知道如何添加此约束。
这是在 iPod touch 上 运行 时在完全相同的点上具有完全相同的内容的完全相同的层次结构。请注意,这次 UITextView 高度和内容高度相同。在这种情况下,UITableViewCellContentView 的高度约束足够大以适应 UITextView 的高度。
在这两种情况下,这是执行和显示相同内容的相同来源。该内容包含带回车符 returns 的短文本行,这就是为什么它在两种屏幕尺寸下的内容大小应相同。 UITextView 想要将其高度调整为 183.5,但在 iPad 上,单元格高度受到 iOS.
生成的约束的不必要约束
这是 viewDidLoad 的代码:
- (void)viewDidLoad {
[super viewDidLoad];
//shrink the uiswitch a little bit
self.displayRegexCharsSwitch.transform = CGAffineTransformMakeScale(0.70, 0.70);
//these next 2 lines set up the table to automatically resize based on content
self.tableView.estimatedRowHeight = 100.0f;
self.tableView.rowHeight = UITableViewAutomaticDimension;
//next line hides the blank cells
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
//these are needed on iPad or rows with accessory view don't resize
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
同样,由于使用静态 table 视图,table 视图控制器中没有 heightForRow 或 cellForRow。
我很困惑。如果内容相同且代码相同,为什么 UITextField 在 iPad 上报告的内容大小与在 iPod 上不同?从层次结构视图可以清楚地看出,UITextField 内部知道其高度为 200,但 contentSize 返回的是 27.5。这是一个静态 table 视图,因此没有 heightForRow 方法和 cellForRow 方法。我依靠自动布局来管理所有布局 - 它在 iPad.
上正确执行
编辑
仅供参考 - 该设计完全基于 Any/Any 尺寸 class。
找到了!我将布局移植到一个新项目,以将问题与项目中发生的其他事情隔离开来。新项目没有出现布局问题。因此,我比较了整体项目设置,发现新项目的部署目标为 iOS 8.3,而原始项目的部署目标为 iOS 6.0。当我将新项目部署目标设置为 iOS 6.0 时,出现了布局问题。 iOS 7.0 相同。但是,对于 iOS 8.0 及更高版本,问题就消失了。是时候强制我的用户升级到 iOS 8.
我有一个静态 UITableView,其中 1 个部分有 3 行。每行包含一个应根据内容调整大小的 UITextView。每个 UITextView 对象都禁用滚动以强制其增长。每个都固定在单元格的 contentView 的所有 4 个边上,没有其他限制。
当我在 iPad(真实或模拟)上 运行 时,无论 UITextView 的内容如何,单元格都会调整为单行文本。当我在调试器中检查视图层次结构时,我看到 UITextView 高度被设置为 27.5,即使内容视图高度为 183.5。这似乎是 UITableViewCellContentView 上限制单元格高度的高度约束的结果。这不是我设置的约束。我的 table 视图控制器没有 heightForRow 或 cellForRow 方法,因为它是静态 table 视图并且对所有内容都使用自动布局。我不知道如何添加此约束。
这是在 iPod touch 上 运行 时在完全相同的点上具有完全相同的内容的完全相同的层次结构。请注意,这次 UITextView 高度和内容高度相同。在这种情况下,UITableViewCellContentView 的高度约束足够大以适应 UITextView 的高度。
在这两种情况下,这是执行和显示相同内容的相同来源。该内容包含带回车符 returns 的短文本行,这就是为什么它在两种屏幕尺寸下的内容大小应相同。 UITextView 想要将其高度调整为 183.5,但在 iPad 上,单元格高度受到 iOS.
生成的约束的不必要约束这是 viewDidLoad 的代码:
- (void)viewDidLoad {
[super viewDidLoad];
//shrink the uiswitch a little bit
self.displayRegexCharsSwitch.transform = CGAffineTransformMakeScale(0.70, 0.70);
//these next 2 lines set up the table to automatically resize based on content
self.tableView.estimatedRowHeight = 100.0f;
self.tableView.rowHeight = UITableViewAutomaticDimension;
//next line hides the blank cells
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
//these are needed on iPad or rows with accessory view don't resize
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
同样,由于使用静态 table 视图,table 视图控制器中没有 heightForRow 或 cellForRow。
我很困惑。如果内容相同且代码相同,为什么 UITextField 在 iPad 上报告的内容大小与在 iPod 上不同?从层次结构视图可以清楚地看出,UITextField 内部知道其高度为 200,但 contentSize 返回的是 27.5。这是一个静态 table 视图,因此没有 heightForRow 方法和 cellForRow 方法。我依靠自动布局来管理所有布局 - 它在 iPad.
上正确执行编辑
仅供参考 - 该设计完全基于 Any/Any 尺寸 class。
找到了!我将布局移植到一个新项目,以将问题与项目中发生的其他事情隔离开来。新项目没有出现布局问题。因此,我比较了整体项目设置,发现新项目的部署目标为 iOS 8.3,而原始项目的部署目标为 iOS 6.0。当我将新项目部署目标设置为 iOS 6.0 时,出现了布局问题。 iOS 7.0 相同。但是,对于 iOS 8.0 及更高版本,问题就消失了。是时候强制我的用户升级到 iOS 8.