我正在使用Xamarin iOS,所以这是在C#...
我有一个UITableViewController
动态单元格 - 一个用于标题,N个单元格可供用户添加或删除。表格视图下方是一个带有几个按钮的页脚。触摸“添加”按钮后,它将导航到新项目的编辑器。当它从编辑器返回时,表视图突然没有填充其容器,并且可以看到父视图的背景颜色(UITableView
的背景是分组UITableView
样式的默认ios灰色。父背景是白色的)。
为了让它变得更奇怪,这不会出现在iOS模拟器中 - 仅在实际的iPad上出现。
此外,如果再次调用layoutSubviews()
(例如将方向更改为纵向),它将自行解析。我们在整个地方使用相同的容器和一般设计模式,没有任何问题。这是第一个出现问题的View。
以下是看似相关的代码:
在包含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
上的推送或弹出中实际发生这种情况。
答案 0 :(得分:0)
终于找到了一个似乎可以解决问题的解决方法,但感觉就像是一个大黑客。
在拥有UINavigationController的视图控制器中......
public override void ViewDidLayoutSubviews()
{
base.ViewDidLayoutSubviews();
if (_propertyView.TopViewController != null)
{
_propertyView.TopViewController.View.Frame = _propertyView.View.Frame;
}
}
当然,只有在你希望ViewController占用UINavigationController的全帧时才适用。
似乎应该有更好的方法来处理这个...