2012-01-14 54 views
0

我有我建大都在Interface Builder一个小表格:调整大小一个UIView所以UIScrollView的工作

enter image description here

当里面的文本框的一个用户触动,我使屏幕滚动的顶部(请注意,当键盘不存在时不需要任何滚动,并且这两个字段都不隐藏在键盘后面)。

enter image description here

我用很少的代码实现这一目标。我的表单控件都在一个UIScrollView里面,它在加载时被禁用并且大小为0x0(默认)。当我检测到键盘的存在时,我启用它并将其大小调整为视图的宽度视图的高度+键盘大小。然后,当键盘被移除时(我将其设置回0x0),禁用并调整滚动视图的大小。

这项工作几乎完美。有一个例外(迄今为止):

可滚动区域(或更确切地说,里面的视图)太高。因为没有键盘的表格并不占用整个屏幕,我发现我可以滚动到我的视图的底部(一个全屏)+键盘高度,当我真正想要的是滚动到视图的内容 +键盘高度。

我以为我可以简单地缩短视图的尺寸,使其仅适用于内容大小,但界面构建器(xcode 4.2)似乎强制它占据整个屏幕。试图在代码中执行它也不起作用,因为显然self.view.frame.size不可分配。我怎样才能达到我要找的东西?具体而言,当键盘存在,我想在屏幕的上半部分的滚动区域的大小,使得没有那么多“松弛”底部:

enter image description here

回答

1

首先,自.view.frame是一个结构,它有两个结构本身的字段 - 大小和原点。如果你想改变大小或原产地,你已经改变了整个框架

self.view.frame = CGRectMake(self.view.frame.origin.x,self.view.frame.origin.y, 
    self.view.frame.size.width, <your desired height>); 

二,什么基础都使用它来创建表单?这看起来只是一个UITableVIew。如果是这样,考虑将UIViewController的类型更改为UITableViewController,因为它自动处理键盘。

如果这两个选项都不适合您,请提供处理键盘外观时使用的代码,以便我们可以考虑更具体的答案。

+0

这些大部分都是UITextFields,只是稍微有些风格。底部的部门是桌面视图。 – 2012-01-14 22:00:39

+0

@BenPackard我想你也应该尝试修改scrollView的contentSize属性。看起来你只是改变了scrollView的框架,但contentSize保持不变,contentSize决定了scrollView的内容将被滚动多少。 – gavrix 2012-01-14 23:22:12

+0

谢谢。所以现在我使用gavrix的答案手动强制视图在加载时变小,然后当弹出键盘时,我将设置内容大小。在这两个我都提供花车,这不觉得很重复,但工作正常。当我撤销这些更改时,我遇到了一个小问题 - 视图'快退'而不是滚动。现在就开始工作。 – 2012-01-14 23:24:43