具有动态大小和 SegmentedItems 的 UISegmentedControl

Posted

技术标签:

【中文标题】具有动态大小和 SegmentedItems 的 UISegmentedControl【英文标题】:UISegmentedControl with dynamic size and SegmentedItems 【发布时间】:2011-05-23 22:31:16 【问题描述】:

我在代码中创建了一个 UISegmentedControl 并使用从 JSON 响应中检索到的名称对其进行初始化。 btnArray 保存要在分段项上显示的名称。第一项是固定的“全部”按钮。

我的问题是源数组包含4-8之间,所以这会导致段上的文本显示在segementItem之外的问题。

有没有什么办法可以让段根据有多少段项而具有可变大小,以便它仍然适合工具栏?

另外,我如何控制显示文本的长度,即如果文本不适合则剪辑文本,类似于 UIButton 的相同行为。

或者有没有人有任何关于使用“下一个”和“上一个”的导航解决方案的提示,在哪里可以切换新的细分?这样我就可以有一个固定的 nr 来始终显示前 4 个,并且有可能在控件上滑动新段并导航回前 4 个。

这是我的代码:

segmentedControl = [[UISegmentedControl alloc] initWithItems:btnArray];
segmentedControl.tintColor = [UIColor grayColor];
segmentedControl.selectedSegmentIndex = 0;
segmentedControl.autoresizingMask = UIViewAutoresizingFlexibleWidth;
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
segmentedControl.frame = CGRectMake(0, 0, 300, 30);

// Setup the target and actions for the segmentedControl
[segmentedControl addTarget:self 
                     action:@selector(selectGroup:) 
           forControlEvents:UIControlEventValueChanged];

// Add the UISegmentedControl as a UIBarButtonItem subview to the UIToolbar
UIBarButtonItem *segmentedItem = [[[UIBarButtonItem alloc] initWithCustomView:segmentedControl] autorelease];
UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
NSArray *groupsButtons = [NSArray arrayWithObjects:flexSpace, segmentedItem, flexSpace, nil];

[groupsToolbar setItems:groupsButtons];

【问题讨论】:

好的,最终使用 Three20 TTTabBar 和 TTTabStrip 来解决我的问题。 Three20 【参考方案1】:

听起来像 UITabBar 是您正在寻找的。如果超过 4 个项目,您将免费获得一个“更多...”按钮,显示其余项目。

【讨论】:

以上是关于具有动态大小和 SegmentedItems 的 UISegmentedControl的主要内容,如果未能解决你的问题,请参考以下文章

如何使具有动态内容的reactstrap模态可调整大小和可拖动?

具有动态大小的ios自动布局

具有动态大小单元格间距问题的 UICollectionViewCell

具有动态大小内容的 UIScrollView

具有自动布局的 UIScrollView 中的动态大小的 UITableView

具有调整单元格动画大小的动态单元格大小