在不更改界面的情况下更新ios中的分段控件

Posted

技术标签:

【中文标题】在不更改界面的情况下更新ios中的分段控件【英文标题】:Update segmented control in ios without change interface 【发布时间】:2014-10-10 11:36:07 【问题描述】:

当我更新分段控制文本时,界面(段的宽度)发生了变化并剪切了一些字母。

[segmentedcontoll setTitle:@"test" forSegmentAtIndex:1];
segmentedcontoll.apportionsSegmentWidthsByContent = YES;

我该如何解决这个问题?

编辑:

【问题讨论】:

能发个截图吗? apportionsSegmentWidthsByContent 是根据内容宽度分隔段的正确方法,但如果您的文本超出控件整个宽度的显示范围,则某些内容将被截断。 【参考方案1】:

您的内容看起来已经超出了标准 UISegmentedControl 的尺寸。

如果您可以使用较小的字体,可以将整个控件设置为较小的字体点大小,seen here。

另一种选择是以其他支持的方式配置分段。使用图像。这有点像 hack,但是您可以使用 UIView Snapshotting API 的视图/标签配置来动态创建图像,并为每个段设置图像,而不是使用文本。这将允许您创建 2 个具有固定宽度的线标签,并将每个部分的图像设置为随着内容的变化而从标签生成的图像。更多工作,但您仍将使用标准类。

最后一个可能最适合您的选项是创建一些其他自定义控件来执行您想要的操作。毕竟,UISegmentedControl 真的只是一个不错的按钮容器。而且您似乎在以非标准方式使用该控件 - 作为控件和输入表单部分。

其他人之前已经走这条路并创建了您可以使用的alternatives。

【讨论】:

【参考方案2】:

您可以创建一个单独的类,如下所示,

 class CustomSegmentedControl: UISegmentedControl 

 //code for creating multi line

  override func didMoveToSuperview()
  

    for segment in subviews
    

      for subview in segment.subviews
      

        if let segmentLabel = subview as? UILabel
        

          segmentLabel.numberOfLines = 0 //just change here the number of lines and check it.

        
      
    
  
 

并在您的视图控制器中创建一个出口,

// Initialize
let items = ["Purple", "Green", "New Segment"]
let customSC = CustomSegmentedControl(items: items)

使用customSC 做任何你想做的事,类似于segmentedControl 对象。

【讨论】:

以上是关于在不更改界面的情况下更新ios中的分段控件的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个 UIViewController 更改分段控件标题(设置)

UINavigationBar中的分段控件奇怪的截图iOS

通过更改分段控件更改视图

ios分段控件怎么获取它的标题

在 Swift 的标头中使用分段控件更改 UICollectionView 的内容

iOS系列 基础篇 09 开关滑块和分段控件