我正在创建一个主要是 UITableView 的屏幕,其中包含具有不同控件和布局的单元格。我让 tableview 工作得很好,直到我切换到允许 tableview 单元水平滚动的纵向模式。单元格不应该水平滚动;只能垂直。当我导航到屏幕并且我已经处于纵向模式时,它工作正常,甚至可以横向并返回纵向。
需要注意的一些事情是我正在使用 iPad、故事板、自动布局,并且 UITableViewCell 是自定义的并且没有笔尖(尽管当我尝试使用笔尖时它会做同样的事情)。所有控件和布局约束都以编程方式添加。我正在使用一个自定义视图控制器,里面有一个视图。在视图内部,我有 tableview 和工具栏。如果我删除视图,以便 tableview 直接位于自定义视图控制器下,它可以正常工作,但是我不能拥有工具栏。
这是我用来解决问题的测试代码:
// Remove all existing subviews
for(UIView *subView in self.contentView.subviews)
{
[subView removeFromSuperview];
}
UILabel *testLabel = [[UILabel alloc] init];
testLabel.text = @"Test";
[testLabel setTranslatesAutoresizingMaskIntoConstraints:NO];
self.contentView addSubview:testLabel];
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(testLabel);
NSString *format = [NSString stringWithFormat:@"V:|-[testLabel]-|"];
NSArray *constraintsArray = [NSLayoutConstraint constraintsWithVisualFormat:format options:nil metrics:nil views:viewsDictionary];
//[self.contentView addConstraints:constraintsArray];
滚动按预期工作,直到我取消注释该行以添加约束。这段代码在我的自定义单元格的方法中,每次单元格出列时都会被调用。我尝试单独添加约束,而不使用视觉格式,但没有运气。我也做了一些研究,发现了从单元格中删除约束并将它们添加到 contentView 的代码,但这也没有帮助。
从横向模式更改为纵向模式时,我需要做些什么来防止单元格水平滚动?
更多信息:经过更多调试后,我发现表格视图的内容大小没有水平缩小。宽度保持在 1024。