segmentedControl.subviews.flatMap{$0.subviews}.forEach { subview in
if let imageView = subview as? UIImageView, let image = imageView.image, image.size.width > 5 {
// The imageView which isn't separator
imageView.contentMode = .scaleAspectFit
}
}
实际上,有一个非常好的通用解决方案:
UIImageView.appearance(whenContainedInInstancesOf: [UISegmentedControl.self]).contentMode = .scaleAspectFit
这可能有点晚了,但我相信它会帮助到某些人。
问题#1: 分段控件中的图像比例失真。
问题#2: 您甚至无法更改图像的颜色。它仍然是黑色的。即使您使用.alwaysTemplate和imageview着色颜色。它也不会动。
解决方案: 忘记尝试通过非官方手段来破解SDK或实现目标。苹果可以轻松更改SegmentedControl,而您的所有工作都将变得多余。 改用BetterSegmentedControl。祝编码愉快。
它高度可定制且易于使用,还支持图像。
我没有找到如何将contentMode设置为ScaleAspectFit,但是您可以使用以下代码在设置图像时设置图像周围的边距:
yourSegmentedControl.setImage(yourImage.resizableImage(withCapInsets: .init(top: 0, left: 10, bottom: 0, right: 10), resizingMode: .stretch), forSegmentAt: 0)
您可以根据需要更改“top”、“left”、“bottom”和“right”的值。这对我有用,希望能帮到您!