在iOS13中,UISegmentedControl有了新的外观,改变分段控件 colored颜色 的现有代码不再像以前那样工作.

在IOS 13之前,您可以设置tintColor,该值将用于分段控件周围的边框、分段之间的线条以及所选分段的背景色.然后,您可以使用前景色属性titleTextAttributes更改每个片段标题的 colored颜色 .

在iOS13下,tintColor什么也不做.您可以设置分段控件backgroundColor来更改分段控件的整体 colored颜色 .但我找不到任何方法来更改用作所选部分背景的 colored颜色 .设置文本属性仍然有效.我甚至try 了设置标题的背景 colored颜色 ,但这只影响标题的背景,而不影响所选片段背景 colored颜色 的睡觉.

简而言之,如何在iOS 13中修改当前选定的UISegmentedControl段的背景色?是否有适当的解决方案,使用公共API,而不需要深入研究私有子视图 struct ?

IOS 13中没有针对UISegmentedControlUIControl的新属性,并且UIView中的任何更改都不相关.

推荐答案

从IOS 13b3开始,现在UISegmentedControl上有selectedSegmentTintColor.

若要更改分段控件的整体 colored颜色 ,请使用其backgroundColor.

要更改选定线段的 colored颜色 ,请使用selectedSegmentTintColor.

要更改未选中段标题的 colored颜色 /字体,请使用状态为.normal/UIControlStateNormalsetTitleTextAttributes.

要更改所选段标题的 colored颜色 /字体,请使用状态为.selected/UIControlStateSelectedsetTitleTextAttributes.

如果使用图像创建分段控件,如果图像是作为模板图像创建的,则分段控件的tintColor将用于为图像着色.但这有一个问题.如果将tintColor设置为与selectedSegmentTintColor相同的 colored颜色 ,则图像在选定段中将不可见.如果将tintColor设置为与backgroundColor相同的 colored颜色 ,则未选定线段上的图像将不可见.这意味着您的图像分段控件必须使用3种不同的 colored颜色 才能使所有内容可见.或者您可以使用非模板图像,而不设置tintColor.

在iOS 12或更早版本下,只需将分段控件设置为tintColor或依赖应用程序的整体色调即可.

Ios相关问答推荐

当包含UITextView的inputAccessoryView显示键盘时,iOS UITableView内容会出现UINavigationBar奇怪的错误

在SwiftUI中动态隐藏列表的空部分

一堆UIGraphics方法在iOS 17中被弃用,没有明确的替代方法?

使用标头UICollectionViewFlowLayout时的简单SwiftUI视图错误

BezierPath 中绘制图像形状轮廓的算法(Canny 边缘检测器)

封装 Swift 导入

如何将 Info.plist 文件添加到 Xcode for admob,错误 添加后会产生多个命令

Strange UIView.animate更改UIButton标题 colored颜色 的行为

在Xcode 15中为具有@Binding的视图创建SwiftUI #预览的方法

有没有办法访问自动生成的 Codable 一致性的编码键?

包装在 AnyView 中时 UIViewControllerRepresentable 无法正常工作

UIImageView 使用 CGAffineTransform 错误旋转

使用 Vim 代替(或与)Xcode 进行 iOS 开发

UILabel - 字符串作为文本和链接

iOS:应用程序在安装应用程序时未征求用户许可.每次都获得 kCLAuthorizationStatusNotDetermined - Objective-c & Swift

如何在 SwiftUI 中检测 TextField 的实时变化?

无法将NSTaggedPointerString类型的值转换为NSNumber

关闭通过模态 segue 显示的视图

swift 语言中的 null / nil

为什么我需要@1x、@2x 和@3x iOS 图像?