2015-05-12 33 views
1

我一直在Google上搜索,似乎无法找到我有问题的答案。根据设备垂直尺寸自动设置UIView垂直尺寸(包括自动布局更改)

我正在写一个应用程序,并希望子UIView的垂直空间,以保持设备的高度或父设备的旋转,而不管方向如何,并且不提前对值进行硬编码。

我的布局结构为:

ViewContainer 
    UIView 
    UIScrollView 
     UIView (Content View) 

具体来说,我想有内容查看初始设置是设备/取向的原生高度的垂直空间,它正在运行在设备旋转时,我希望垂直空间更改为新的垂直高度。 UIScrollView将仅用于水平平移。

我将使用Quartz在视图中绘制。我是否通过intrinsicContentSize设置初始高度?如果是这样,我该如何查询父视图?

我试过在内容视图中使用self.superview,但这不起作用。如何检测到发生了变化,发生变化后,如何获得新的Y分辨率,然后应用它?另外我不想禁用自动布局,如果我不必。

这是一个视觉的我想要的东西,如果我还没有做出明确表态: https://www.evernote.com/l/AAI3VFkKBARPlYPsoURJOwAmIiGielF5p-w

+0

我会根据'UIScreen.mainScreen()。bounds.size.height'(或横幅,如果你在横向)的大小。然后使用'UIDeviceOrientationIsLandscape()'宏。还有其他一些人也喜欢它。看看他们。 –

+0

我已经尝试修改TN2154中的Pure AutoLayout代码,但是我无法检测到更改(并且我不确定这是否是正确的方法来首先解决问题)。我可以通过intrinsicContentSize强制大小,但不知道如何正确检测大小,或者发生旋转的时间。我一直在看viewWillTransitionToSize,但不知道这是正确的方法。 – Tornado

+0

要获得方向更改的通知,您可以订阅通知。不知道这是否适合您的用例,但这里是代码片段[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged :) name:UIDeviceOrientationDidChangeNotification object:nil];'然后确保您有一个名为'orientationChanged '接受'NSNotification'参数 –

回答

0

我有同样的看法层次的应用程序。

你想要的是纯粹的AutoLayout可以实现的,具有以下约束条件。只有垂直约束这里包括:

view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[scrollView]|", options: .allZeros, metrics: nil, views: ["scrollView" : scrollView])) 

scrollView.addConstraint(NSLayoutConstraint(item: contentView, attribute: .Height, relatedBy: .Equal, toItem: scrollView, attribute: .Height, multiplier: 1.0, constant: 0.0)) 
scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[contentView]|", options: .allZeros, metrics: nil, views: ["contentView" : contentView])) 

由于内容查看的高度总是正确的,不知道你是否仍然希望得到通知的方向变化。

+0

太棒了!这工作。我想要一个纯粹的AutoLayout解决方案,这个伎俩!谢谢! – Tornado

+0

你会接受这个答案吗? –

+0

是的。对不起,这是我在这里问的第一个问题,所以我在这方面有点不好意思。我只需要检查绿色选中标记? – Tornado