【问题标题】:Adding and positioning Array of UIButtons in UIScrollView在 UIScrollView 中添加和定位 UIButtons 数组
【发布时间】: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)?任何帮助表示赞赏。

【问题讨论】:

    标签: ios swift uitableview uiscrollview uibutton


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

    代码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 代码。 :)
    猜你喜欢
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多