自定义 UISlider 内部条角半径问题 iOS 14
Custom UISlider inner bar corner radius issue iOS 14
在我的自定义 UISlider 中,我想实现一个圆角内栏。我没有使用拇指。它在 iOS 13 中工作正常,但在 14 中它崩溃并出现错误:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSSingleObjectArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
自定义 UISlider 代码
class CustomSlider: UISlider {
@IBInspectable var trackHeight: CGFloat = 30
override func layoutSubviews() {
super.layoutSubviews()
self.layer.sublayers![1].cornerRadius = 12
self.thumbTintColor = .clear
}
}
self.layer.sublayers![1].cornerRadius = 12,这一行造成了问题。如果我评论这行代码工作正常。
您可以使用 if let
...
override func layoutSubviews() {
super.layoutSubviews()
if let arrSubLayer = layer.sublayers, arrSubLayer.count > 1 {
arrSubLayer[1].cornerRadius = 12
}
self.thumbTintColor = .clear
}
它将检查子图层。如果有的话,它将在您尝试访问索引 1 时检查计数 > 1。
在我的自定义 UISlider 中,我想实现一个圆角内栏。我没有使用拇指。它在 iOS 13 中工作正常,但在 14 中它崩溃并出现错误:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSSingleObjectArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
自定义 UISlider 代码
class CustomSlider: UISlider {
@IBInspectable var trackHeight: CGFloat = 30
override func layoutSubviews() {
super.layoutSubviews()
self.layer.sublayers![1].cornerRadius = 12
self.thumbTintColor = .clear
}
}
self.layer.sublayers![1].cornerRadius = 12,这一行造成了问题。如果我评论这行代码工作正常。
您可以使用 if let
...
override func layoutSubviews() {
super.layoutSubviews()
if let arrSubLayer = layer.sublayers, arrSubLayer.count > 1 {
arrSubLayer[1].cornerRadius = 12
}
self.thumbTintColor = .clear
}
它将检查子图层。如果有的话,它将在您尝试访问索引 1 时检查计数 > 1。