滚动视图内的分段控制

时间:2013-07-10 17:52:23

标签: ios objective-c cocoa-touch

我正在尝试创建一个非常长的分段控制器,让用户在众多选项中进行选择。我怎样才能将它放入滚动视图中?

我试过拖放它,但它不允许我滚动它。

6 个答案:

答案 0 :(得分:5)

尝试使用以下代码在滚动视图中添加分段控件:

- (void)viewDidLoad
{
    [super viewDidLoad];

    journals = [[NSMutableArray alloc]init];

    self.tableView.dataSource = self;
    self.tableView.delegate = self;

    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 49, 320, 29)];
    self.segmentedControl.frame = CGRectMake(0, 0, 640, 29);

    scrollView.contentSize = CGSizeMake(self.segmentedControl.frame.size.width, self.segmentedControl.frame.size.height -1);
    scrollView.showsHorizontalScrollIndicator = NO;

    self.segmentedControl.selectedSegmentIndex = 0;

    [scrollView addSubview:self.segmentedControl];
    [self.view addSubview:scrollView];

    [self fillJournals];

    // Do any additional setup after loading the view, typically from a nib.
}

这是关于如何在滚动视图中创建分段控件的帖子

http://penningthoughtsandmemoirs.com/2013/12/16/sliding-segmented-control/

从以下网址下载源代码:

https://github.com/sahilriaz1110/SlidingSegmentedControl

答案 1 :(得分:1)

您必须设置UIScrollView的内容大小,否则不会滚动。

myScrollView.contentSize = mySegmentedControl.frame.size;

答案 2 :(得分:1)

而不是建议如何将分段控件放在滚动视图中(参见列出的其他答案)我将完全建议一种不同的方法:更改UI元素。

如果你在桌面应用程序上有一对(两到三个)互斥选项,你可以使用单选按钮,这是有意义的;但是如果您有十个以上的选项,那么在滚动视图中抛出这些单选按钮将不是最佳选择。更好/更清洁的用户界面将使用下拉菜单。

那是桌面应用程序..但移动操作系统的UI原则是相同的。段控件应该有很少的选项(可能是五个顶部)。除此之外,你应该使用不同的UI元素。

想象一下,如果iPhone在选择语言时,会在分段控件中提供每种语言。没有!相反,在选择语言时,会显示一个列表供您选择。

答案 3 :(得分:0)

您使用的是autolayout吗?如果是这样,那么您需要在viewDidLayoutSubviews中设置scrollView的内容大小。像:

- (void) viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    [scrollView setContentSize:[segControl frame].size];
}

如果您没有使用自动布局,那么您可以在-(void)viewDidLoad中执行此操作,例如:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [scrollView setContentSize:[segControl frame].size];
}

编辑您可能还想让scrollview contentSize略小于您的分段控件,因此在垂直方向上没有给出:

[scrollView setContentSize:CGSizeMake([segControl frame].size.width, [segControl frame].size.height-1)];

答案 4 :(得分:0)

如果UISegmentedControl宽度为640,请使用:

[yourScrollView setContentSize:CGSizeMake([segControl frame].size.width, 0)];

使用此行将使其水平滚动以在UISegmentedControl上选择更多选项。

答案 5 :(得分:-1)

在UIBuilder中,你可以添加进入ViewController的ScrollView,并用分段控件填充它,它比屏幕大。

Segmented Control Storyboard Segmented Control UI Properties