搜索时是否可以在UISearchBar中显示UIActivityIndicator?
答案 0 :(得分:7)
是的,你可以。
开始搜索时,创建一个活动指示符,并使用UISearchBar
方法将其添加为addSubView
的子视图。完成搜索后,使用removeFromSuperView
方法将其从搜索栏中删除。
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
//set frame for activity indicator
[searchBar addSubview: spinner];
[spinner startAnimating];
请参阅此链接以获取替代way。
答案 1 :(得分:7)
您可以在Swift 3中使用以下扩展名。
UISearchBar扩展程序
extension UISearchBar {
public var textField: UITextField? {
let subViews = subviews.flatMap { $0.subviews }
guard let textField = (subViews.filter { $0 is UITextField }).first as? UITextField else {
return nil
}
return textField
}
public var activityIndicator: UIActivityIndicatorView? {
return textField?.leftView?.subviews.flatMap{ $0 as? UIActivityIndicatorView }.first
}
var isLoading: Bool {
get {
return activityIndicator != nil
} set {
if newValue {
if activityIndicator == nil {
let newActivityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .gray)
newActivityIndicator.transform = CGAffineTransform(scaleX: 0.7, y: 0.7)
newActivityIndicator.startAnimating()
newActivityIndicator.backgroundColor = UIColor.white
textField?.leftView?.addSubview(newActivityIndicator)
let leftViewSize = textField?.leftView?.frame.size ?? CGSize.zero
newActivityIndicator.center = CGPoint(x: leftViewSize.width/2, y: leftViewSize.height/2)
}
} else {
activityIndicator?.removeFromSuperview()
}
}
}
}
用法:
显示活动:
searchBar.isLoading = true
隐藏活动:
searchBar.isLoading = false
答案 2 :(得分:0)
没有发现任何宣传的解决方案在iOS13上能很好地工作...这是我自己的解决方案,它是搜索栏的子类,应该对将来的使用更可靠
Base64InputStream