Ios TableViewController没有';t在添加单元格后填充容器
我使用的是Xamarin iOS,所以这是C# 我有一个带有动态单元格的Ios TableViewController没有';t在添加单元格后填充容器,ios,uitableview,xamarin.ios,mvvmcross,Ios,Uitableview,Xamarin.ios,Mvvmcross,我使用的是Xamarin iOS,所以这是C# 我有一个带有动态单元格的UITableViewController——一个用于标题,N个用户可以添加或删除的单元格。在表视图下面是一个带有两个按钮的页脚。当点击Add按钮时,它会导航到新项目的编辑器。当它从编辑器返回时,表视图突然没有填充其容器,并且父视图的背景色被看到(对于分组的UITableView样式,UITableView的背景默认为ios灰色。父视图背景为白色) 更奇怪的是,这并没有出现在iOS模拟器中——只出现在实际的iPad上。
UITableViewController
——一个用于标题,N个用户可以添加或删除的单元格。在表视图下面是一个带有两个按钮的页脚。当点击Add按钮时,它会导航到新项目的编辑器。当它从编辑器返回时,表视图突然没有填充其容器,并且父视图的背景色被看到(对于分组的UITableView
样式,UITableView
的背景默认为ios灰色。父视图背景为白色)
更奇怪的是,这并没有出现在iOS模拟器中——只出现在实际的iPad上。此外,如果再次调用
layoutSubviews()
,它会自行解决问题(例如,将方向更改为纵向)。我们在所有地方都使用相同的容器和通用设计模式,没有任何问题。这是第一个显示问题的视图
以下是看似相关的代码位:
在包含UITableView
的父视图中:
public override void ViewDidLoad()
{
base.ViewDidLoad();
_propertyView = new BackNotifyingUINavigationController(this); //This navigation controller hosts the table view
AddChildViewController(_propertyView);
_propertyView.View.Frame = PropertyContainer.Bounds;
PropertyContainer.Add(_propertyView.View);
_propertyView.DidMoveToParentViewController(this);
_propertyView.View.AutoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight;
//Some unrelated views...
//Some MvvmCross binding stuff...
}
在表视图中:
public override void ViewDidLoad()
{
base.ViewDidLoad();
_tableSource = new TableSource(TableView); //Custom MvxTableViewSource. Seemingly not overriding anything relevant
_tableSource.UseAnimations = true;
_tableSource.DeselectAutomatically = true;
_tableSource.ReloadOnAllItemsSourceSets = true;
TableView.AlwaysBounceVertical = false;
TableView.TableHeaderView = new UIView(new CoreGraphics.CGRect(0, 0, TableView.Bounds.Width, 10.0f));
TableView.Source = _tableSource;
TableView.SetEditing(true, false); //Always in editing mode
_doneButton = new UIBarButtonItem(UIBarButtonSystemItem.Done);
NavigationItem.RightBarButtonItem = _doneButton;
//Some MvvmCross binding stuff...
}
编辑:这实际上发生在
UINavigationController
上的按下或弹出按钮上,仅当键盘打开时 终于找到了一个似乎可以解决问题的解决办法,但感觉像是一个大难题
在拥有UINavigationController的视图控制器中
public override void ViewDidLayoutSubviews()
{
base.ViewDidLayoutSubviews();
if (_propertyView.TopViewController != null)
{
_propertyView.TopViewController.View.Frame = _propertyView.View.Frame;
}
}
当然,这仅适用于希望ViewController占据UINavigationController完整帧的情况
似乎应该有更好的方法来处理这个问题……终于找到了一个解决办法,似乎可以解决这个问题,但感觉像是一个大难题 在拥有UINavigationController的视图控制器中
public override void ViewDidLayoutSubviews()
{
base.ViewDidLayoutSubviews();
if (_propertyView.TopViewController != null)
{
_propertyView.TopViewController.View.Frame = _propertyView.View.Frame;
}
}
当然,这仅适用于希望ViewController占据UINavigationController完整帧的情况
看来应该有更好的方法来处理这件事