如何在“for”循环中添加子视图
Posted
技术标签:
【中文标题】如何在“for”循环中添加子视图【英文标题】:how to add subviews in a 'for' loop 【发布时间】:2012-02-07 21:10:13 【问题描述】:我只是想为数组中的每个对象添加一个 UIView,而不在屏幕上显示超过 3 个,但视图并不相邻。每个视图之间有一个很大的间隙(一个视图宽度)。这就是我所拥有的;
int numberOfUsersOnScreen;
if (array.count < 3)
numberOfViewsOnScreen = array.count;
else
numberOfUsersOnScreen = 3;
double width = (self.scrollView.frame.size.width/numberOfViewsOnScreen);
CGRect r = CGRectMake(0, 0, width, 1200);
[self.usersScrollView setContentSize:CGSizeMake(width*array.count, 0)];
for (int i = 0; i < users.count; i++)
r.origin.x = width * i;
UIView * view = [[UIView alloc] initFrame:r];
[self.scrollView addSubview:view];
【问题讨论】:
【参考方案1】:试试这个:
int xPosition = 0;
for (int i = 0; i < users.count; i++)
UIView * view = [[UIView alloc] initFrame:CGRectMake(xPosition, 0, width, 1200)];
[self.scrollView addSubview:view];
xPosition += width;
【讨论】:
谢谢,但仍然没有...当我更改 r.origin.x = width * i;到 r.origin.x = 宽度 * i/2;它似乎可以工作,但后来在代码中,当我向其中一个新视图添加子视图时,它显示在左侧的一半。 尝试将视图上的 backgroundColor 设置为绿色,它会显示视图的真实宽度。您也可以使用 NSLog 显示每个视图的宽度和 xPosition 以确保数字正确。 我已经做到了,绿色横跨整个scrollView。我为每个视图设置的触摸事件也好像间隙是视图一样。不知道有没有用? 如果绿色跨越整个子视图,那么您的滚动视图子视图将按照您的意愿运行。没有间隙。我认为您的问题可能在您的视图的子视图中。仔细检查您添加到每个视图的橙色。 对不起,我已经解决了。视图之间的间隙不是空白的,我的自定义视图类没有正确显示。这是drawRect中的一个问题;。感谢您的帮助。【参考方案2】:代替
[self.scrollView setContentSize:CGSizeMake(width*array.count, 0)];
应该是
[self.scrollView setContentSize:CGSizeMake(width*array.count, self.scrollView.frame.size.height)];
【讨论】:
【参考方案3】:for (int i = 0; i < users.count; i++)
r.origin.x = width * i;
UIView * view = [[UIView alloc] initFrame:r];
[self.scrollView addSubview:view];
这样,视图对象也会出现内存泄漏
for (int i = 0; i < users.count; i++)
r.origin.x = width * i;
UIView * view = [[UIView alloc] initFrame:r];
[self.scrollView addSubview:view];
[view release];
【讨论】:
我在 ios 5 中编写。这已使用 ARC 进行了清理。还是谢谢。以上是关于如何在“for”循环中添加子视图的主要内容,如果未能解决你的问题,请参考以下文章
如何在swift中使用for循环将按钮添加到stackview?