как сделать горизонтальное меню прокрутки в iOS

Я хотел бы сделать меню, которое будет иметь горизонтальной прокрутки.

меню содержит всего 16 категорий. Поэтому я планирую взять 8 на первой части и отдохнуть 8 на другой части.

может ли кто-нибудь дать мне представление о том, что нужно сделать?

Я считаю, что мне нужно использовать ниже.

UIScrollView
Add buttons in this scrollview

что это?


то, что я хочу, находится на первом экране 8 кнопок, где первый экран будет иметь две строки с 4 кнопками, установленными на каждом ряд.

образец меню можно увидеть на http://www.shoutem.com/

2 ответов


Если все, что вы делаете, это добавление кнопок в горизонтальный вид прокрутки, вы сделаете что-то вроде следующего...

- (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];
    }

это создаст scrollview высотой 100, шириной с его родителем и добавит к нему 8 кнопок.


вы можете достичь своей цели, используя UIScrollView и ваши объекты UIButton, это будет включать установку свойств фрейма / макета каждой кнопки в зависимости от того, какую версию iOS вы нацеливаете. (Как в ответе Эрика).

однако, если вы нацелены на iOS 6 и выше, используя UICollectionView, где ваши элементы / ячейки являются кнопками, вы можете получить горизонтальную прокрутку "строка меню" бесплатно. На этом есть много сообщений SO, но основная идея-использовать макет потока где размер элемента имеет высоту, такую, что будет только одна строка элементов (просто сделайте высоту элемента такой же, как высота представления коллекции).

EDIT:

Я должен сказать, что это может показаться излишним (и, возможно, это так), но в конечном итоге вы получите гораздо более гибкий компонент в случае изменения требований в будущем. Это также не приводит к большому количеству дополнительного кода и абстрагирует утомительные детали макета.