如何在iOS中制作水平滚动菜单

如何在iOS中制作水平滚动菜单,ios,objective-c,menu,horizontalscrollview,Ios,Objective C,Menu,Horizontalscrollview,我想做一个水平滚动的菜单 该菜单共包含16个类别。所以我计划第一部分取8,另一部分取8 有人能告诉我需要做什么吗 我相信我需要在下面使用 UIScrollView Add buttons in this scrollview 就这样 我想要的是第一个屏幕上的8个按钮,其中第一个屏幕将有两行,每行设置4个按钮 菜单示例可以在上看到,如果您所做的只是在水平滚动视图中添加按钮,您可以执行以下操作 - (void)createScrollMenu { UIScrollView *scroll

我想做一个水平滚动的菜单

该菜单共包含16个类别。所以我计划第一部分取8,另一部分取8

有人能告诉我需要做什么吗

我相信我需要在下面使用

UIScrollView
Add buttons in this scrollview
就这样


我想要的是第一个屏幕上的8个按钮,其中第一个屏幕将有两行,每行设置4个按钮


菜单示例可以在

上看到,如果您所做的只是在水平滚动视图中添加按钮,您可以执行以下操作

- (void)createScrollMenu
{
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 100)];

        int x = 0;
        for (int i = 0; i < 8; i++) {
            UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(x, 0, 100, 100)];
            [button setTitle:[NSString stringWithFormat:@"Button %d", i] forState:UIControlStateNormal];

            [scrollView addSubview:button];

            x += button.frame.size.width;
        }

        scrollView.contentSize = CGSizeMake(x, scrollView.frame.size.height);
            scrollView.backgroundColor = [UIColor redColor];

       [self.view addSubview:scrollView];
    }
-(无效)创建滚动菜单
{
UIScrollView*scrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,100)];
int x=0;
对于(int i=0;i<8;i++){
UIButton*button=[[UIButton alloc]initWithFrame:CGRectMake(x,0,100,100)];
[按钮设置标题:[NSString stringWithFormat:@“按钮%d”,i]用于状态:UIControlStateNormal];
[滚动视图添加子视图:按钮];
x+=按钮.框架.尺寸.宽度;
}
scrollView.contentSize=CGSizeMake(x,scrollView.frame.size.height);
scrollView.backgroundColor=[UIColor redColor];
[self.view addSubview:scrollView];
}

这将创建一个高度为100、宽度与其父级一样大的滚动视图,并在其中添加8个按钮。

使用UIScrollView和UIButton对象可以实现您的目标,这将涉及根据您的目标iOS版本设置每个按钮的框架/布局属性。(如埃里克的回答)

但是,如果您的目标是iOS 6及以上版本,使用UICollectionView,其中项目/单元格是按钮,那么您可以免费获得水平滚动的“菜单栏”。关于这一点,有很多SO帖子,但主要的想法是使用一个流布局,其中项目大小的高度只有一行项目(只需使项目高度与集合视图的高度相同)

编辑:


我应该说,这看起来有点过分(也许是这样),但如果将来需求发生变化,您最终会得到一个更加灵活的组件。它也不会产生太多额外的代码,也不会抽象出繁琐的布局细节。

通过更多的RND,我成功地得到了我想要的。谢谢你的帮助。嗨,埃里克,我也在做同样的事情,水平滚动工作得很好,但是按钮没有显示。。!埃里克,一个非常有用的例子。我有个问题。也许你可以解释为什么当我把滚动条放在画面底部时,滚动变得更加困难?