在 UIScrollView 中添加和定位 UIButtons 数组

Posted

技术标签:

【中文标题】在 UIScrollView 中添加和定位 UIButtons 数组【英文标题】:Adding and positioning Array of UIButtons in UIScrollView 【发布时间】:2016-01-15 12:05:09 【问题描述】:

首先,这里是screenshot of my ViewController in Action。 我的 ViewController 包含嵌入式 YouTube 视频,下面是 UIScrollView,在他下面是 UITableView,现在是随机填充的。我想从特定歌手那里获取所有专辑,并为每个人提供一个单独的UIButton,如屏幕截图所示 ->

svi, lek za spavanje, 巴尔干

问题是,我会从YouTube API得到所有专辑,所以我不知道歌手有多少专辑。我必须在 Swift 中以编程方式添加 UIButtons。

在我的语言中,“svi”的意思是“全部”,所以当我点击“svi”时,我应该会在UITableView 中看到它下面列出的所有专辑。同样,所有专辑和“svi”(“all”)都应该在UIScrollView中,所以当用户点击“Balkan”时,UITableView应该填充来自该“Balkan”专辑的所有曲目.

根据顶部提供的屏幕截图,谁能建议我如何在UIScrollView 中制作和定位所有UIButtons (as an Array of UIButtons)?任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:
    在情节提要中添加滚动视图/以编程方式添加 有一个包含专辑列表的数组 以编程方式创建 UIButton 并将其添加到滚动视图中 最后设置滚动视图的大小。

代码sn-p如下,

   UIScrollView * scView;
   UIButton * btn;
   NSMutableArray * array;
   float btnWidth = 44;
   for(int i=0;i<array.count;i++) 
    btn = [UIButton buttonWithType:UIButtonTypeCustom];
    btn.frame = CGRectMake(i*btnWidth, 0, btnWidth, 44);
    [btn setTitle:[array objectAtIndex:i]forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(btnTapped) forControlEvents:UIControlEventTouchUpInside];
    [scView addSubview:btn];

[scView setContentSize:CGSizeMake(btnWidth*array.count, 50)];

- (void)btnTapped 
  // button click call back method

用以下方法检查字符串的大小

- (CGSize)getHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font 
CGSize size = CGSizeZero;
if (text) 
    CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@ NSFontAttributeName:font  context:nil];
    size = CGSizeMake(frame.size.width, frame.size.height);

return size;

将您的专辑名称传递给此方法,它会返回 CGSize,从中获取宽度并将该宽度值设置为上面 for 循环中的按钮宽度。

【讨论】:

我已经明确说过语言是 Swift。顺便说一句,谢谢你的想法。 没注意,希望你能用这个逻辑。一切都保持不变,只需要更改语法。 是的。当然,改变它并完成你写的一切。现在我得到这样的东西,这很丑陋。 prntscr.com/9qec5g 但是,我还是有问题。 prntscr.com/9qef3c let btnWidth: CGFloat = 150 btn.frame = CGRectMake((CGFloat)((CGFloat)(i)*btnWidth), 0, btnWidth-100, 53) 这些值有效,但按钮不够宽。如果我拉伸他,布局就会中断。 请查看我更新的答案。它再次是一个 Objective-C 代码。 :)

以上是关于在 UIScrollView 中添加和定位 UIButtons 数组的主要内容,如果未能解决你的问题,请参考以下文章

在 UIScrollView 中居中 UIButtons

UIScrollView - 如何定位控件

如何在里面定位我的 UIScrollView 和文本字段?

将 UIImage 定位在 UIScrollView 的中心进行缩放

UIImageView 在 UIScrollView 内未正确定位

如何获取有关 UIScrollView 中页面的信息?