iOS标签式按钮,如果没有足够的空间,可以向下移动

iOS标签式按钮,如果没有足够的空间,可以向下移动,ios,objective-c,Ios,Objective C,请看附件中的图片 我可以像图中那样制作一个按钮,但我不知道如何继续向视图中添加按钮,如果没有足够的空间,新按钮将转到下一行。此外,音乐视图也应相应向下移动 我不确定是否需要为整个电影制作一个自定义视图,或者只是计算按钮大小并将其添加到视图中 请帮助我找到一种方法来执行此操作。要手动执行此操作 为电影和音乐创建单独的UIView容器(这样可以更容易地向下移动音乐),但是可以-只需在视图中添加必要的按钮,计算按钮大小并相应地重新定位它们 例如: NSArray *names = @[@"Lion

请看附件中的图片

我可以像图中那样制作一个按钮,但我不知道如何继续向视图中添加按钮,如果没有足够的空间,新按钮将转到下一行。此外,音乐视图也应相应向下移动

我不确定是否需要为整个电影制作一个自定义视图,或者只是计算按钮大小并将其添加到视图中

请帮助我找到一种方法来执行此操作。

要手动执行此操作

为电影和音乐创建单独的UIView容器(这样可以更容易地向下移动音乐),但是可以-只需在视图中添加必要的按钮,计算按钮大小并相应地重新定位它们

例如:

NSArray *names = @[@"Lion King", @"Marley and me", @"Super duper"];

        for(UIView *view in [_moviewView subviews]) //we hide all buttons, in case this time there are some buttons which will not be used
        {
            if([view isKindOfClass:[UIButton class]])
            {
                [view setHidden:YES];
            }
        }

        for (int i = 0; i < [names count]; i++)
        {
            UIButton *button = [_moviesView viewWithTag:i+100]; //To make sure we actually touch buttons instead of other subviews, if we presume, that _moviesView will have up tofew other subviews which will have no tags.

            if(!button)
            {
                button = [UIButton new];

                [button setTag:i+100];

                [_moviesView addSubview:button];
            }

            [button setTitle:names[i] forState:UIControlStateNormal];

            [button setHidden:NO];   //unhide - we will use this button as we have a name for it.

            //more button adjustments
        }

        int currentX = 0;

        int currentY = 0;

        for(UIButton *button in [_moviesView subviews])
        {
            if(button.tag >= 100)
            {
                CGSize *buttonSize = ...//Calculate button width based on title?

                if(buttonSize.width + currentX >= _moviesView.frame.size.width) //in case this button will go outside boundaries - position it on next line.
                {
                    currentY += 30 + 5; //constant button height? + 5 space

                    currentX = 0; // reset x.
                }

                [button setFrame:CGRectMake(currentX, currentY, buttonSize.width, buttonSize.height)];

                currentX += buttonSize.width + 5; //5 - space between buttons

            }
        }

        //And now - based on our currentY (+30 button height)  we can resize moviesView and then reposition musicView, for which we would do the same..
NSArray*名称=@[@“狮子王”、“马利和我”、“超级傻瓜”];
对于(UIView*view in[\u moviewView subview])//我们隐藏了所有按钮,以防这次有一些按钮不被使用
{
if([view IsKindof类:[UIButton类]])
{
[查看设置隐藏:是];
}
}
对于(int i=0;i<[名称计数];i++)
{
UIButton*button=[\u moviesView view with tag:i+100];//为了确保我们实际触摸的是按钮而不是其他子视图,如果我们假设,\u moviesView将有多达几个没有标记的其他子视图。
如果(!按钮)
{
按钮=[UIButton new];
[按钮设置标签:i+100];
[_moviesviewaddsubview:按钮];
}
[按钮设置标题:状态名称[i]:UIControlStateNormal];
[按钮设置隐藏:否];//取消隐藏-我们将使用此按钮,因为我们有它的名称。
//更多按钮调整
}
int currentX=0;
int电流y=0;
对于(UIButton*[\u moviesView子视图]中的按钮)
{
如果(button.tag>=100)
{
CGSize*buttonSize=…//根据标题计算按钮宽度?
如果(buttonSize.width+currentX>=\u moviesView.frame.size.width)//如果此按钮超出边界,请将其放置在下一行。
{
当前Y+=30+5;//恒定按钮高度?+5空间
currentX=0;//重置x。
}
[button setFrame:CGRectMake(currentX,currentY,buttonSize.width,buttonSize.height)];
currentX+=buttonSize.width+5;//5-按钮之间的间距
}
}
//现在,根据当前的Y(+30按钮高度),我们可以调整moviesView的大小,然后重新定位musicView,我们也会这样做。。

我希望你能明白。。祝你好运

我建议使用
UICollectionView
。这正是它建造的目的

您可以让按钮根据标题字符串自动调整其大小,集合视图(更具体地说,流布局)将为您完成所有包装和显示


详细解释集合视图如何工作超出了本问题的范围,请参阅和。

我正在尝试向视图添加按钮并计算按钮大小。。。但是这需要做太多的工作,我正试图找出更好的方法来做这件事,
UICollectionView
对你来说将是一个更好的选择,但是如何将UICollectionView应用到这个案例中呢?谢谢你的建议,顺便说一句,如何处理向下移动音乐部分的问题?你是否建议将音乐作为另一个集合视图,并根据电影集合视图的高度将其向下移动?否,集合视图有部分和项目。因此,您可以在一个集合视图中维护多个部分。但是如何准确地将UICollectionView应用于这种情况?正如答案中所述,我认为这超出了问题的范围。您应该参考上述文档。