【问题标题】:"Auto Layout still required" error when adding subview to UITableView only on iOS 7仅在 iOS 7 上将子视图添加到 UITableView 时出现“仍需要自动布局”错误
【发布时间】: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


    【解决方案1】:

    我不再使用自动布局,并且不再将它用于我的 emptyView

    emptyView = new UIView (new RectangleF(0, 0, this.View.Bounds.Size.Width, this.View.Bounds.Size.Height));
    emptyView.BackgroundColor = UIColor.White;
    emptyView.AutoresizingMask = UIViewAutoresizing.All;
    

    现在它可以工作了,但我不知道它是否打算不使用自动布局。也许有人可以提供一个更好的答案,我可以将其标记为已接受。

    【讨论】:

      猜你喜欢
      • 2015-05-30
      • 2013-10-18
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-16
      • 2018-09-06
      • 1970-01-01
      相关资源
      最近更新 更多