UIActivityIndi​​catorView超出searchBar的textField(leftView)

时间:2019-08-08 11:02:20

标签: ios swift uisearchbar uiactivityindicatorview xcode11

我正在使用此扩展程序用UIActivityIndi​​catorView替换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()

        }
    }
}

}

0 个答案:

没有答案