如何使用 XIB 的子视图实现 UIScrollView
Posted
技术标签:
【中文标题】如何使用 XIB 的子视图实现 UIScrollView【英文标题】:How to implement UIScrollView with Subviews from XIB's 【发布时间】:2011-01-14 23:12:29 【问题描述】:以网格格式将 UIView(来自 xib)添加到 UIScrollView 的最佳方法是什么?
我查看了 AQGridView,但不确定从哪里开始创建我需要的自定义视图。
【问题讨论】:
【参考方案1】:我假设网格是指主屏幕跳板之类的东西,其中每个图标都是不同的视图。
我还假设您已在 IB 中实例化 UIView 并设置了所有适当的连接并在您的代码中有一个指针。
然后在你的拥有 UIScrollView 的控制器中,(这就是我会做的,以前做过的)循环遍历你的所有 UIViews(在你复制在 xib 中创建的模板之后;我再次假设在这里,因为您的问题没有很好地定义),使用一些简单的数学设置它们的框架,然后使用 addSubview 将它们添加到 UIScrollView。最后确保将 UIScrollView 的 contentSize 设置为适当的值。
这是一个例子:
-(void)displayNewView:(NewView *)newIcon
//create view object
NewViewController *newVC = [[NewViewController alloc] init];
//modify the new UIView so it shows the correct state
newVC.networkHost = newIcon;
//add view object to screen
[self.scrollView addSubview:newVC.view];
//release a retain on the object
[newVC release];
//reposition the view object
newVC.view.frame = CGRectMake((self.viewsOnDisplay%3*104), (self.viewsOnDisplay/3*105+6), 106, 95);
//resize the view if necessary
self.scrollView.contentSize = CGSizeMake(320.0, (self.viewsOnDisplay/3*105+96+6));
在视图重新定位的那一行中,进行了总和数学运算,而不是向您显示一堆符号,我从我的一个应用程序中取了一行,我会告诉您每个数字的含义(它们都是不同,因此这是区分它们的便捷方法):
3: number of views per row
104: horizontal spacing between views
105: vertical spacing between views
6: space at the very top of the UIScrollView (a header if u will)
106: view width
95: view height
因为这是一个简单地将单个 UIView 添加到屏幕的方法,它访问本地合成属性self.viewsOnDisplay
以了解已经显示了多少视图,因此它知道将下一个视图放在哪里。如果您将其作为 for 循环或其他内容的一部分执行此操作,则这将只是 i
(或称为计数器 var 的任何内容)。请记住,您的计数器应从 0 开始。
【讨论】:
以上是关于如何使用 XIB 的子视图实现 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章
来自 XIB 的自定义 UIView 加载具有巨大规模的子视图
如何在通过 UITableViewCell 中的 XIB 加载的子视图中对标签和 UILabels/UIImageViews 进行初始样式设置