滚动视图内的分段控制

Posted

技术标签:

【中文标题】滚动视图内的分段控制【英文标题】:Segmented Control inside of Scroll View 【发布时间】:2013-07-10 17:52:23 【问题描述】:

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

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

【问题讨论】:

分段控件不应该那么长;对于这些情况,我建议使用不同的控件——例如弹出菜单。 我第二点,@QwertyBob,特别是随着 ios7 中的 UI 变化,我只是在测试这个,并且很难让我的手指恰好放在 UISegmentedControl 上以使其滚动。跨度> 真的吗?它不会滚动? 也看到这个问题:***.com/questions/17496604/… 如果您有很多选项,您可以使用一个按钮打开一个提供垂直选项列表的屏幕。 (就像系统在“通用 > 国际 > 语言”中列出的语言一样)。该按钮将显示当前选择的名称。 【参考方案1】:

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

- (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

【讨论】:

【参考方案2】:

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

myScrollView.contentSize = mySegmentedControl.frame.size;

【讨论】:

【参考方案3】:

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

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

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

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

【讨论】:

【参考方案4】:

你在使用自动布局吗?如果是这样,那么您将需要从 viewDidLayoutSubviews 中设置滚动视图的内容大小。喜欢:

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

编辑您可能还希望滚动视图的 contentSize 比您的分段控件略小,因此在垂直方向上没有让步:

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

【讨论】:

【参考方案5】:

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

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

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

【讨论】:

【参考方案6】:

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

【讨论】:

以上是关于滚动视图内的分段控制的主要内容,如果未能解决你的问题,请参考以下文章

滚动视图不水平滚动

ios中带有表格视图的嵌套滚动视图

表格单元格内的滚动视图内的自定义视图未响应事件

另一个滚动视图内的滚动视图内的表格视图

忽略UITableViewCell内的垂直滚动

滚动视图内的“绝对位置”视图