ios - UIView 不重绘,但元素错位

标签 ios objective-c xcode uiview xcode-storyboard

我的应用程序布局有问题,解释起来有点棘手。当应用程序首次启动时,这就是我展示的内容:

enter image description here

在用户点击“创建配置文件”后,我将这些按钮设置为动画并改为显示注册表单:

enter image description here

不用说,按钮现在不在它们的“自然”位置。但是请注意,文本字段是 - 这是我将它们放置在 Storyboard 中的位置,但是当 View 首次加载时我隐藏了它们。动画效果很好,但是当用户将焦点放在文本字段上并且键盘隐藏了该字段时,我需要向上 ScrollView 。如何触发错误的细节有点难以解释,所以我设法将其归结为似乎是重绘事件,但它不是......让我试着解释一下。

首先,这是键盘即将显示时发生的情况:

- (void)keyboardWillShow:(NSNotification*)notification
{
    CGRect frame = self.view.frame;
    frame.size.height -= 1;
    self.view.frame = frame;
}

请注意,这只是一个测试,可能是我发现的仍然会触发错误的最小值。它所做的只是调整 View 的大小。我希望 View 与原来完全一样,少一个像素,对吗?错误的。这是我得到的:

enter image description here

也就是说,所有元素都回到了它们的“自然”位置,完全忽略了它们之前的位置。我的第一个猜测是窗口似乎正在重绘,所以我尝试了这个:

- (void)drawRect:(CGRect)rect
{
    [super drawRect:rect];
    NSLog(@"View was drawn");
}

但这只会在首次绘制窗口时触发,不会在这种奇怪的行为发生时触发。要理解我所说的“自然位置”的意思,这是我在 Storyboard 中的内容:

enter image description here

您还可以看到我没有使用约束和 View 的底层结构:

enter image description here

整个设置的完整代码非常广泛,所以展示起来几乎不实用。但是,我如何为 subview 设置动画会继续更改它们的框架,就像我在 keyboardWillShow 中所做的那样,并将它们的位置设置为我需要的任何位置。

有什么想法吗?

最佳答案

所以您正在使用 Storyboard并且您将整个 Storyboard的“使用自动布局”设置为 false?

在这种情况下,您的应用程序使用的是“struts and springs”风格的放置规则。你将不得不调试那些。

在帖子中描述 View Controller 中的所有内容有点困难。在 IB 中更容易复习。或许您可以编写一个实用程序函数来记录 View Controller 中 View 的所有 autoresizingMask 值,并检查这些值,然后将它们发布在这里,描述原始帖子中每个 View 的 autoresizingMask 值。

关于ios - UIView 不重绘,但元素错位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26321449/

相关文章:

ios - 如何判断给定文件是否可以通过照片框架添加到照片库?

iOS:以编程方式确定 WiFi 连接是 2.4Ghz 还是 5Ghz

ios - 取消选中 UITableview 中的单元格时,如何从数组中删除数据?

ios - AVPlayer 不同步

iphone - 在 iPhone 的 uinavigationbar 上使用图像或色调颜色?

iOS: append 到文件

ios - 定义大于 iPhone 6 屏幕尺寸?

objective-c - cocoa 应用程序改变鼠标光标?

ios - 过渡到 ARC - 发布不引发错误

ios - 获取 CoreData 时因内存问题而终止