Iphone 使用Interface Builder创建UIScrollView的步骤
我正在尝试使用UIScrollView,似乎有一些基本的东西我只是不理解 假设我想在iphone应用程序中使用UIScrollView。我有一个充满按钮的视图,它是320x700。显然,这对于320x480的iPhone来说太大了。所以我知道我必须使用UIScrollView。但是,这是我创建对象的顺序吗Iphone 使用Interface Builder创建UIScrollView的步骤,iphone,ios,uiview,uiscrollview,Iphone,Ios,Uiview,Uiscrollview,我正在尝试使用UIScrollView,似乎有一些基本的东西我只是不理解 假设我想在iphone应用程序中使用UIScrollView。我有一个充满按钮的视图,它是320x700。显然,这对于320x480的iPhone来说太大了。所以我知道我必须使用UIScrollView。但是,这是我创建对象的顺序吗 创建一个320x700的UIScrollView作为“视图”中的尺寸 将所有我的按钮等放置在此滚动视图上 在viewDidLoad中,将contentSize设置为320x700 将UIScr
还有其他更合理的方法吗?在我对如何工作的理解中,我遗漏了什么?你是对的,视图是添加所有UI元素的画布。 界面生成器一开始有点奇怪,但你会习惯的,这就是它的工作方式 您必须调整ScrollView的大小,这让您陷入了困境。你应该这样想: ScrollView有一个框架大小和一个内容大小。它的构建方式是,如果内容大小大于帧大小,那么它将滚动。您必须在interface builder中使框架尽可能大,以便可以定位进入其中的元素。运行应用程序时,应调整滚动框的大小,使其适合iPhone的屏幕分辨率。控件的边框比屏幕大是没有意义的
--------------------------------------------
| | | |
| | | |
| | | |
| | | |
| | |<------------------ iPhone Screen frame
| | | |
| | | |
| | | |
| | | |<------- ScrollView Content size
| | | |
| | | |
| | |<----------------- ScrollView Frame Size
| | | |
| | | |
| | | |
| | | |
| | | |
| ------------------------ |
| |
| |
| |
--------------------------------------------
--------------------------------------------
| | | |
| | | |
| | | |
| | | |
|| |更新
我已经发布了我认为更简单更好的
起初的
下面是另一种您可能更喜欢的方法:
将文件的所有者占位符的自定义类设置为视图控制器子类
在nib中将UIScrollView
创建为顶级对象。将其大小设置为屏幕大小(320x460),或者只打开“模拟度量”下的状态栏
将滚动视图的委托
出口连接到文件的所有者
将文件所有者的视图
出口设置为滚动视图
在nib中创建一个ui视图
作为另一个顶级对象。这将是您的内容视图
将内容视图的大小设置为320x700
在视图控制器(文件的所有者)中创建名为contentView
的强(或保留,如果不使用ARC)插座,并将其连接到内容视图
将按钮放在内容视图中
在视图控制器的viewDidLoad
中,执行以下操作:
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.contentView];
((UIScrollView *)self.view).contentSize = self.contentView.frame.size;
}
- (void)viewDidUnload {
self.contentView = nil;
[super viewDidUnload];
}
在视图控制器的viewDidUnload
中,执行以下操作:
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.contentView];
((UIScrollView *)self.view).contentSize = self.contentView.frame.size;
}
- (void)viewDidUnload {
self.contentView = nil;
[super viewDidUnload];
}
谢谢!这对我来说更有意义。。。在运行时对视图进行“缝合”,以便内容视图的构建不会受到Interface Builder的干扰。一个问题,为什么要将滚动视图大小设置为460?是否满足滚动视图必须小于480的要求?状态栏需要20个点。大小其实并不重要,因为UIViewController
无论如何都应该将其调整为全屏。对于scrollview,Interface builder已经浪费了我好几个小时的时间。如果我自己用代码来构建它,速度会更快。大多数时候这都是我的错,但在这种情况下,IB在把所有东西都扔到导航栏的高度时会遇到一些问题。我相信我做得对。我喜欢用代码缝合东西。为什么有必要在ViewDiUnload中将contentView设置为nil?如果您的contentView
outlet很强,它会将视图保留在内存中,除非您将其设置为nil。谢谢,这也很有意义。我认为你说得对,你被框架和内容大小之间的差异所困扰。在运行时调整大小也是有意义的,我将尝试一下!