0

我需要将 UIButtons 放在 UIScrollView 上。我拥有的代码有效,但是根据dataItems我拥有的数量,间距不均匀。

有问题的片段

CGRectMake(10, ((120 / (count + 1)) * (i + 1) * 3) ,300,50)

具体来说

((120 / (count + 1)) * (i + 1) * 3)

工作代码

int count = [dataItems count];  /*  not a specific value, can grow  */
for (int i = 0; i < count; i++) {
    UIButton* aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [aButton setTag:i];
    [aButton setFrame: CGRectMake(10,((120 / (count + 1)) * (i + 1) * 3) ,300,50) ];
    [aButton setTitle:[[dataItems objectAtIndex:i] objectForKey:@"Feed"] forState:UIControlStateNormal];
    [aButton addTarget:self action:@selector(viewCategories:) forControlEvents:UIControlEventTouchUpInside];
    [scroller addSubview:aButton];
}

截屏

就间距而言,右侧的示例应该与左侧的示例相似。UIButtons坐在 a 上,UIScrollView所以如果有更多UIScrollView's也应该增长,所以如果有 30+ ,按钮可以滚动到屏幕外。contentSizedataItemsdataItems

         在此处输入图像描述

4

3 回答 3

4

听起来你需要一个设定的大小和填充......

int count = [dataItems count];
CGFloat staticX = 10; // Static X for all buttons.
CGFloat staticWidth = 300; // Static Width for all Buttons.
CGFloat staticHeight = 50; // Static Height for all buttons.

CGFloat staticPadding = 10; // Padding to add between each button.

for (int i = 0; i < count; i++) {
    UIButton* aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [aButton setTag:i];
    //Calculate with the Static values.
    //I added one set of padding for the top. then multiplied padding plus height for the count.
    // 10 + 0 for the first
    // 10 + 60 for the second.
    // 10 + 120 for the third. and so on.
    [aButton setFrame: CGRectMake(10,(staticPadding + (i * (staticHeight + staticPadding)) ,staticWidth,staticHeight) ];
    [aButton setTitle:[[dataItems objectAtIndex:i] objectForKey:@"Feed"] forState:UIControlStateNormal];
    [aButton addTarget:self action:@selector(viewCategories:) forControlEvents:UIControlEventTouchUpInside];
    [scroller addSubview:aButton];
}

但是,如果您试图让按钮来执行这种行为。我倾向于同意其余的。您可以制作一个带有按钮的自定义单元格。

然后,当表格要求按钮时,您可以加载该按钮单元格。

并且您将表格与您的 [dataItems count] 联系在一起,以获得项目的总数。

那么您唯一的计算是在最初设置 dataItems 计数时设置单元格高度。确保不要让它们太短。桌子将处理其余的事情。

于 2011-05-11T00:56:24.050 回答
1

我同意 Gurpartap 的观点,但如果你对此一无所知,我会采取不同的做法。即使您现在理解了该 setFrame 语句中的数学运算,您或其他人以后会理解它吗?我肯定不会快速查看它。为什么不做类似的事情:

CGRect frm = CGRectMake(10,10,300,50);
for (int i = 0; i < count; i++) {
  UIButton* aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];  
  [aButton setFrame: frm];
  frm.origin.y = frm.origin.y + aButton.frame.size.height + 10;
  etc, etc
于 2011-05-11T00:43:22.290 回答
0

您应该真正使用 UITableView 。它自己完成滚动视图、单元格布局等。您只需指定单元格内容。

于 2011-05-11T00:33:16.853 回答