为什么在Xamarin iOS中出现“必须将自动调整掩码转换为约束以使_setHostsLayoutEngine:YES”错误?

时间:2016-07-18 19:43:32

标签: ios uitableview xamarin xamarin.ios mvvmcross

我使用TableViewCell创建了一个TableView,并始终具有View开头。我有这个错误:

  

必须将自动调整遮罩转换为约束以使_setHostsLayoutEngine:是

我正在使用XIB文件来设计我的TableViewCell和TableView。

这是我的TableView:

public partial class FavoriteProjectsView : MvxTableViewController<FavoriteProjectsViewModel>
{
    public FavoriteProjectsView() : base("FavoriteProjectsView", null)
    {
    }

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();

        // ios7 layout
        if (RespondsToSelector(new Selector("edgesForExtendedLayout")))
        {
            EdgesForExtendedLayout = UIRectEdge.None;
        }

        var source = new MvxSimpleTableViewSource(TableView, FavoriteProjectsItem.Key, FavoriteProjectsItem.Key);
        TableView.Source = source;

        this.CreateBinding(source).To<FavoriteProjectsViewModel>(viewModel => viewModel.Projetos).Apply();
        this.CreateBinding(BtnSave).To<FavoriteProjectsViewModel>(viewModel => viewModel.SaveCommand).Apply();

        var bounds = UIScreen.MainScreen.Bounds;
        var carregamento = new CarregamentoIOS(bounds);

        ViewModel.Carregamento = carregamento;
        ViewModel.PreenchePagina();
    }
}

这是我的TableViewCell:

public partial class FavoriteProjectsItem : MvxTableViewCell
{
    public static readonly NSString Key = new NSString("FavoriteProjectsItem");
    public static readonly UINib Nib = UINib.FromName("FavoriteProjectsItem", NSBundle.MainBundle);

    protected FavoriteProjectsItem(IntPtr handle) : base(handle)
    {
        this.DelayBind(() =>
        {
            this.CreateBinding(LblName).To<Project>(project => project.Name).Apply();
            this.CreateBinding(SwitchFavorite).To<Project>(project => project.IsFavorite).Apply();
        });
    }

    public static FavoriteProjectsItem Create()
    {
        return (FavoriteProjectsItem)Nib.Instantiate(null, null)[0];
    }
}

1 个答案:

答案 0 :(得分:1)

您似乎正在使用MvvmCross或其他一些Mvvm库?

这只是一个猜测,但似乎有些东西,某处设置属性_setHostsLayoutEngine:YES,但此设置需要自动布局约束,可能已通过对{{ 1}}。

在iOS中布置视图的旧系统是使用名为view.TranslatesAutoresizingMaskIntoConstraints = false的东西。 AutoResizing标志可以在代码中设置,也可以在XIB / Storyboard中设置。如果您正在使用AutoResizing,新的和改进的布局系统使用约束并为XIB / Storyboard提供更大的灵活性(和复杂性),那么任何AutoLayout标志都应自动转换为可以约束的约束与AutoResizing系统一起使用。这是默认行为,但可以使用上面提到的调用AutoLayout禁用。

有关在Xamarin iOS Designer中使用AutoLayout的更多信息,请参阅: https://developer.xamarin.com/guides/ios/user_interface/designer/designer_auto_layout/