Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 滚动视图内部的分段控件_Ios_Objective C_Cocoa Touch - Fatal编程技术网

Ios 滚动视图内部的分段控件

Ios 滚动视图内部的分段控件,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,我正在尝试创建一个真正的长分段控制器,让用户在许多选项中进行选择。我如何才能将其放入滚动视图中 我尝试过拖放它,但它不允许我滚动它 您必须设置UIScrollView的内容大小,否则它将无法滚动 myScrollView.contentSize = mySegmentedControl.frame.size; 你在使用自动布局吗?如果是这样,则需要在viewDidLayoutSubviews中设置scrollView的内容大小。比如: - (void) viewDidLayoutSubview

我正在尝试创建一个真正的长分段控制器,让用户在许多选项中进行选择。我如何才能将其放入滚动视图中


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

您必须设置
UIScrollView
的内容大小,否则它将无法滚动

myScrollView.contentSize = mySegmentedControl.frame.size;

你在使用自动布局吗?如果是这样,则需要在viewDidLayoutSubviews中设置scrollView的内容大小。比如:

- (void) viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    [scrollView setContentSize:[segControl frame].size];
}
如果您不使用autolayout,则可以在
-(void)viewdiload
中执行此操作,如:

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

与其建议如何在scrollview中放置分段控件(请参见列出的其他答案),我将建议一种完全不同的方法:更改UI元素

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

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


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

请尝试通过以下代码在滚动视图中添加分段控件:

- (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.
}
下面是一篇关于如何在滚动视图中创建分段控件的文章

从以下位置下载源代码:


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

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

使用此行将使其水平滚动以选择UIBuilder中
UISegmentedControl

上的更多选项。您可以添加位于ViewController内部的滚动视图,并使用比屏幕大的分段控件填充它


分段控件不应该那么长;我建议在这些情况下使用不同的控件,比如弹出式菜单。我支持@QwertyBob,特别是在iOS7中的UI更改,我只是在测试这个,很难让我的手指刚好接触到UISegmentedControl以使其滚动。真的吗?它不会滚动?也看到这个问题:如果你有很多选项,你可以用一个按钮打开一个屏幕,提供一个垂直的选项列表。(类似于“常规>国际>语言”中的系统列表语言)。该按钮将显示当前选择的名称。