Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios TableViewController没有';t在添加单元格后填充容器_Ios_Uitableview_Xamarin.ios_Mvvmcross - Fatal编程技术网

Ios TableViewController没有';t在添加单元格后填充容器

Ios TableViewController没有';t在添加单元格后填充容器,ios,uitableview,xamarin.ios,mvvmcross,Ios,Uitableview,Xamarin.ios,Mvvmcross,我使用的是Xamarin iOS,所以这是C# 我有一个带有动态单元格的UITableViewController——一个用于标题,N个用户可以添加或删除的单元格。在表视图下面是一个带有两个按钮的页脚。当点击Add按钮时,它会导航到新项目的编辑器。当它从编辑器返回时,表视图突然没有填充其容器,并且父视图的背景色被看到(对于分组的UITableView样式,UITableView的背景默认为ios灰色。父视图背景为白色) 更奇怪的是,这并没有出现在iOS模拟器中——只出现在实际的iPad上。

我使用的是Xamarin iOS,所以这是C#

我有一个带有动态单元格的
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完整帧的情况

看来应该有更好的方法来处理这件事