我的应用程序布局有问题,解释起来有点棘手。当应用程序首次启动时,这就是我正在展示的内容:
用户点击“创建个人资料”后,我会设置这些按钮的动画并显示注册表单:
毋庸置疑,按钮现在还处于“自然”状态。但请注意,文本字段是 - 我将它们放在故事板中的位置,但是当视图首次加载时我将它们隐藏起来。动画效果很好,但是当用户将焦点放在文本字段并且键盘隐藏字段时,我需要向上滚动视图。有关如何触发错误的细节有点难以解释,所以我设法将其归结为似乎是重绘事件,除了它不是......让我试着解释一下。
首先,这是键盘即将显示时发生的情况:
- (void)keyboardWillShow:(NSNotification*)notification
{
CGRect frame = self.view.frame;
frame.size.height -= 1;
self.view.frame = frame;
}
请注意,这只是一个测试,可能是我发现仍会触发错误的最小值。它所做的只是调整视图大小。我希望视图与原来完全一样,只需少一个像素,对吗?错误。这是我得到的:
也就是说,所有元素都返回到“自然”位置,完全忽略了之前的位置。我的第一个猜测是,窗口似乎正在重绘,所以我尝试了这个:
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
NSLog(@"View was drawn");
}
但这仅在首次绘制窗口时触发,而不是在发生此奇怪行为时触发。要理解“自然位置”的含义,这就是我在故事板中的内容:
您还可以看到我没有使用约束和视图的基础结构:
整个设置的完整代码非常广泛,因此完全不实用。但是,我如何动画子视图继续像keyboardWillShow
中那样更改框架,并将其位置设置为我需要的位置。
有什么想法吗?
答案 0 :(得分:1)
所以你正在使用故事板,并且你已经使用了自动布局"整个故事板设置为false?
在这种情况下,您的应用正在使用" struts和spring"样式放置规则。您将不得不调试这些。
在帖子中的视图控制器中描述所有内容有点困难。在IB中更容易理解它。也许您可以编写一个实用程序函数来记录视图控制器中视图的所有autoresizingMask值,然后查看它们,并在此处发布它们,描述原始帖子中每个视图的autoresizingMask值。