我有一个由两个UIViews
组成的视图控制器。一个视图是超级视图,另一个是子视图。两个视图的大小相同,为320X568,并且具有相同的原点(0,0)。我通过首先将纵横比设置为自身来为子视图添加约束,然后使用倍数为1的超视图等宽宽比。然后将子视图水平和垂直居中放置在容器中。当识别出向上拖动手势时,子视图假设使用CGRectOffset
向上移动一定量。我注意到视图没有以正确的位置结束,所以我删除了所有偏移代码以查看发生了什么。在viewDidLoad
中,我检查超级视图和子视图的origin.y及其0 - 这是正确的。但是,一旦识别出向上拖动手势,我会为y起点执行另一个NSLog
,并且子视图打印-31.5并且超级视图打印64.不确定如何在所有CGRectOffset
注释掉的情况下发生这种情况。我想这可能与导航栏有关,但我不确定。
答案 0 :(得分:0)
我不知道与CGRectOffset的交易是什么,但我确实知道"问题"没有它。没问题!这里唯一的一点就是您要过早地检查的origin.y
,即viewDidLoad
。
请记住,viewDidLoad
实际上还没有发生任何事情。视图控制器具有视图,但全部都是。特别是,视图尚未出现在界面中且尚未给出其布局。
所以,这只是了解事件意味着什么。您假设viewDidLoad
表示视图位于界面中且具有其位置和大小。它并不意味着什么。如果您想知道布局后视图的位置,您需要等到布局后。就像,viewDidLayoutSubviews
是个好地方。这意味着布局刚刚发生!
至于64值,它正是你所期望的。您已将视图的顶部固定在顶部布局指南中 - 这意味着导航栏的底部,与您建议的完全一样。