美文网首页
iOS13 适配总结

iOS13 适配总结

作者: 司徒新新 | 来源:发表于2019-10-16 12:37 被阅读0次

    更改Placehoder颜色

    该私有key禁止访问了

    textField.setValue(color, forKeyPath: "_placeholderLabel.textColor")
    searchBar.value(forKey: "_searchField")
    //替换为
    textField.attributedPlaceholder = NSAttributedString.init(string: self.placeholder ?? "", attributes: [NSAttributedString.Key.foregroundColor : UIColor.red])
    searchBar.value(forKey: "searchField") as! UITextField
    

    presentViewController样式变化

    在使用 presentViewController 来跳转视图时系统提供了两个参数来简化跳转的设置,modalTransitionStyle 和 modalPresentationStyle。前者为转场过渡的类型,后者为展示的样式,系统为两者都提供了多种可选样式。

    展示的方式变了就看 modalPresentationStyle 的值,在iOS13前,该值默认为0,即 .fullScreen。而此时,在 iOS13 中变为了-2。

    在 iOS13 中 modalPresentationStyle 的类型新增了以下类型:

    UIModalPresentationAutomatic = -2
    

    修改方法

    let vc = UIViewController()     // vc即需要被present的viewcontroller
    vc.modalPresentationStyle = .custom
    self.present(vc, animated: true, completion: nil)
    

    夜间模式 Dark/Light

    一般我们之前都是默认的,现在系统出了一个夜间模式,将以前的白色都变成了黑色,与我们UI设计不一样,因此我是采取的禁用了dark的模式.

    我分别在我的BaseViewController和BaseTabBarViewController的 viewDidLoad方法里写了下面的代码.

    if #available(iOS 13.0, *) { 
         overrideUserInterfaceStyle = .light
    } else {
         // Fallback on earlier versions
    }
    

    或者在info.plist设置,对应的Value为Light/Dark


    image.png

    TabBar红点位置偏移

    如果之前有通过TabBar上图片位置来设置红点位置,在iOS13上会发现显示位置都在最左边去了。遍历UITabBarButton的subViews发现只有在TabBar选中状态下才能取到UITabBarSwappableImageView,解决办法是修改为通过UITabBarButton的位置来设置红点的frame

    黑线处理

    public func clearBlack() {
         self.view.subviews.last?.subviews.forEach({ (view) in
                if view.isKind(of: NSClassFromString("UISearchBarBackground")!) {
                    view.backgroundColor = UIColor.white
                    view.layer.contents = nil
                    return
                }
         })
    }
    

    UISegmentedControl问题

    UISegmentedControl样式变化了,之前写好的


    image.png

    变成了这样


    image.png

    只需要添加这些代码就可以了

    
    extension UISegmentedControl{
        public func segmentStyle(){
            if#available(iOS 13, *) {
                let tintColorImage = UIColor.white.toImage(size: CGSize.init(width:self.frame.size.width, height:self.frame.size.height))
                
                let dividerColorImage = UIColor.white.toImage(size: CGSize.init(width:1, height:self.frame.size.height))
              
                setBackgroundImage(UIColor.white.toImage(size: CGSize.init(width:self.frame.size.width, height:self.frame.size.height)), for: .normal, barMetrics: .default)
             
                setBackgroundImage(tintColorImage, for: .selected, barMetrics: .default)
                
                setBackgroundImage(tintColorImage, for: .highlighted, barMetrics: .default)
                
                setBackgroundImage(tintColorImage, for: [.highlighted, .selected], barMetrics: .default)
                
                setDividerImage(dividerColorImage, forLeftSegmentState: .normal, rightSegmentState: .normal, barMetrics: .default)
                
                setDividerImage(dividerColorImage, forLeftSegmentState: .selected, rightSegmentState: .selected, barMetrics: .default)
                
                self.apportionsSegmentWidthsByContent = true
                
                layer.borderColor = UIColor.white.cgColor
                
                layer.borderWidth = 0
            } else {
                let dividerImage = UIColor.white.toImage(size: CGSize.init(width:1, height:self.frame.size.height))
                tintColor = UIColor.clear
                setDividerImage(dividerImage, forLeftSegmentState: .normal, rightSegmentState: .selected, barMetrics: .default)
                setDividerImage(dividerImage, forLeftSegmentState: .selected, rightSegmentState: .normal, barMetrics: .default)
                setDividerImage(dividerImage, forLeftSegmentState: .normal, rightSegmentState: .normal, barMetrics: .default)
            }
        }
    }
    
    
    
    extension UIColor {
        public func toImage(size:CGSize) -> UIImage?{
            var resultImage : UIImage? = nil
            let rect = CGRect(x:0, y:0, width: size.width, height: size.height)
            UIGraphicsBeginImageContextWithOptions(rect.size, false, UIScreen.main.scale)
            guard let context = UIGraphicsGetCurrentContext() else {
                return resultImage
            }
    
            context.setFillColor(self.cgColor)
            context.fill(rect)
            resultImage = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return resultImage
        }
        
    }
    
    
    segment.segmentStyle() //使用的时候直接segment.segmentStyle()调用就可以考虑
    

    WebView废弃

    查看API可以看到:iOS 2.0 到 iOS 11.0
    在12.0就已经被废弃,部分APP使用webview时, 审核被拒

    @available(iOS, introduced: 2.0, deprecated: 12.0, message: "No longer supported; please adopt WKWebView.")
    open class UIWebView : UIView, NSCoding, UIScrollViewDelegate {
        .........
    }
    

    未完待续...

    借鉴文章: iOS13适配

    相关文章

      网友评论

          本文标题:iOS13 适配总结

          本文链接:https://www.haomeiwen.com/subject/atdymctx.html