【发布时间】:2014-10-20 08:01:08
【问题描述】:
我有一个加载UITableViewController 的容器。一开始表格中没有数据,所以我显示一个空视图。这就是我在ViewDidLoad 中的做法:
emptyView = new UIView ();
emptyView.BackgroundColor = UIColor.Gray;
// works on iOS 8 but has to be removed on iOS 7
emptyView.TranslatesAutoresizingMaskIntoConstraints = false;
var views = NSDictionary.FromObjectsAndKeys(
new object[] { emptyView },
new object[] { "emptyView" }
);
View.AddSubview (emptyView);
this.TableView.SeparatorStyle = UITableViewCellSeparatorStyle.None;
View.AddConstraints(NSLayoutConstraint.FromVisualFormat ("V:|-0-[emptyView]-0-|", NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));
View.AddConstraints(NSLayoutConstraint.FromVisualFormat ("H:|-0-[emptyView]-0-|", NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));
问题现在是我禁用自动调整掩码的那一行。在 iOS 7.1(在设备和模拟器上)我收到以下错误:
NSInternalInconsistencyException 原因:仍然需要自动布局 执行 -layoutSubviews 后。 UITableView 的实现 -layoutSubviews 需要调用super。
如果我注释掉 TranslatesAutoresizingMaskIntoConstraints 一切正常。相同的代码在 iOS 8 上无需修改即可运行。我只删除了视图上的自动调整大小掩码,而不是整个 UITableView。将视图添加到表头会导致同样的问题。
我应该如何解决自动布局的问题?尽管代码是用 C# 编写的,但您始终可以提供来自 Objective C 世界的解决方案,因为它们的概念是相同的。
【问题讨论】:
标签: ios uitableview xamarin.ios autolayout autoresizingmask