在方向更改时,在UISplitviewController中获取正确的详细视图宽度

时间:2014-09-10 09:20:33

标签: c# ios orientation uisplitviewcontroller ipad

我的目标背景是here

我使用带有 MasterViewController DetailViewController 的拆分视图控制器。在详细视图中,我想要两个表视图控制器。将显示表格视图,但如果方向更改UITableViewControllers的宽度和位置错误。

在我的 DetailViewController 中,我在ViewDidLoad中有以下代码:

base.ViewDidLoad ();

float halfSize = View.Bounds.Size.Width / 2;
RectangleF leftArea = new RectangleF (0, 0, halfSize, View.Frame.Size.Height);
RectangleF rightArea = new RectangleF (halfSize, 0, halfSize, View.Frame.Size.Height);

if(documentListController == null)
    documentListController = new DocumentListController ();
if(documentInfoController == null)
    documentInfoController = new DocumentInfoController ();

documentListController.View.Frame = leftArea;
documentListController.View = documentListController.TableView;
documentInfoController.View.Frame = rightArea;
documentInfoController.View = documentInfoController.TableView;
View.AddSubview (documentListController.View);
View.AddSubview (documentInfoController.View);

在纵向方向上,宽度正常,但在横向上,表格太小(因为它在纵向模式下具有大小)。

我尝试使用documentListController.View.AutoresizingMask = UIViewAutoresizing.FlexibleWidth;但它没有效果。我还实现了一个通知,我想检测方向的变化。如果我在横向模式下执行此操作,则详细视图的宽度为703,纵向上的宽度为768(仅在第一次启动时,如果我进行一些旋转,则值会更改。)

无论当前方向如何,如何获得 DetailViewController 的正确宽度?

PS:代码在C#,但如果您能在Objective-C中提供代码,我也会很高兴。

修改

我正在使用OrientationDidChangeNotification通知来获取方向更改。现在我注意到,如果我查询this.View.Bounds.Size.Width,那么值就是之前方向的旧值!我如何获得当前值?

编辑2:

现在我使用了硬编码值。我看到如果我切换到横向然后回到肖像,表视图具有相同的小尺寸。视图需要更新。但是如何?

编辑3:

我还尝试使用约束来正确设置宽度:

documentListController.View.AddConstraints (
    new []{
        NSLayoutConstraint.Create (documentListController.View, NSLayoutAttribute.Width, NSLayoutRelation.Equal, View, NSLayoutAttribute.Width, .5f, 0),
        NSLayoutConstraint.Create (documentListController.View, NSLayoutAttribute.Height, NSLayoutRelation.Equal, View, NSLayoutAttribute.Height, 1, 0),
        NSLayoutConstraint.Create (documentListController.View, NSLayoutAttribute.Top, NSLayoutRelation.Equal, View, NSLayoutAttribute.Top, 1, 0),
        NSLayoutConstraint.Create (documentListController.View, NSLayoutAttribute.Left, NSLayoutRelation.Equal, View, NSLayoutAttribute.Left, 1, 0)
    }
);
documentListController.View.TranslatesAutoresizingMaskIntoConstraints = false;

但在这里我得到了

  

约束是否引用了视图子树之外的内容?

0 个答案:

没有答案