2016-07-18 3 views
0

Я создал TableView с TableViewCell и всегда имею вид открытия. У меня есть эта ошибка:Почему я получаю сообщение «Должен ли перевести авторезистирующую маску в ограничения, чтобы иметь ошибку _setHostsLayoutEngine: YES» в Xamarin iOS?

Must translate autoresizing mask into constraints to have _setHostsLayoutEngine:YES

Я использую 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

Кажется, вы используете MvvmCross или какой-либо другой библиотеки MVVM?

Это только догадка в этот момент, но казалось бы, что-то где-то устанавливает свойство _setHostsLayoutEngine:YES, но для этого параметра требуются ограничения автоматического макета, которые, возможно, были отключены при вызове вида на view.TranslatesAutoresizingMaskIntoConstraints = false.

Старая система раскладки представлений в iOS должна была использовать что-то под названием AutoResizing. Флаги AutoResizing могут быть установлены в коде или в XIB/Storyboard. Если вы используете AutoLayout, новую и улучшенную систему макета, которая использует ограничения и предлагает гораздо большую гибкость (и сложность), для XIB/Storyboard тогда любые флаги AutoResizing должны быть автоматически преобразованы в ограничения, которые могут использоваться с системой AutoLayout. Это поведение по умолчанию, но может быть отключено с помощью вызова, указанного выше, view.TranslatesAutoresizingMaskIntoConstraints = false.

Для получения дополнительной информации об использовании AutoLayout с Xamarin IOS Designer, смотрите: https://developer.xamarin.com/guides/ios/user_interface/designer/designer_auto_layout/

+0

Благодаря человеку, это workerd. Отвечая на ваш вопрос, да, я использую MvvmCross. –

+0

Отлично, рад, что помог! – jgoldberger