【问题标题】:how to add subviews in a 'for' loop如何在“for”循环中添加子视图
【发布时间】: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];
}    

【问题讨论】:

    标签: iphone objective-c ios cocoa-touch ipad


    【解决方案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 进行了清理。还是谢谢。
      猜你喜欢
      • 2023-01-01
      • 2011-12-10
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-19
      • 1970-01-01
      • 2020-07-21
      相关资源
      最近更新 更多