我正在使用此扩展程序用UIActivityIndicatorView替换searchBar的textField放大镜图标(左视图),但是问题是它超出了textField。 它曾经在 iOS 12,Xcode 10 上完美运行,但是在我更改为 iOS 13,Xcode 11 Beta 5 后,它不再属于searchBar的textField。
extension UISearchBar {
private var searchIcon: UIImage? {
let subViews = subviews.flatMap { $0.subviews }
return ((subViews.filter { $0 is UIImageView }).first as? UIImageView)?.image
}
private var activityIndicator: UIActivityIndicatorView? {
return searchTextField.leftView?.subviews.compactMap{ $0 as? UIActivityIndicatorView }.first
}
var isLoading: Bool {
get {
return activityIndicator != nil
} set {
let _searchIcon = searchIcon
if newValue {
if activityIndicator == nil {
let activityIndicator = UIActivityIndicatorView(frame: CGRect(origin: .zero, size: CGSize(width: 24, height: 24)))
activityIndicator.translatesAutoresizingMaskIntoConstraints = true
activityIndicator.style = .medium
activityIndicator.startAnimating()
activityIndicator.backgroundColor = UIColor.clear
activityIndicator.hidesWhenStopped = true
self.searchTextField.leftView?.addSubview(activityIndicator)
self.setImage(UIImage(), for: .search, state: .normal)
}
} else {
self.setImage(_searchIcon, for: .search, state: .normal)
activityIndicator?.hidesWhenStopped = true
activityIndicator?.removeFromSuperview()
activityIndicator?.stopAnimating()
}
}
}
}