美文网首页
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适配

    参考: iOS13 适配踩坑 - 持续更新 iOS 13 适配要点总结 iOS 13 适配要点总结 1、prese...

  • iOS13 适配问题 看这一篇就够了

    技术参考: apple login IOS13适配-详细 iOS 13 适配(持续更新中) iOS13适配 掘金 ...

  • iOS 13适配

    技术参考: apple login IOS13适配-详细 iOS 13 适配(持续更新中) iOS13适配 掘金 ...

  • iOS动态换肤-支持暗夜模式

    适配暗夜模式 iOS13新出现了暗夜模式,苹果新增了一些API方便我们来做适配。这里不做深入,只是稍微总结下。适配...

  • iOS13 适配详细

    对iOS13 适配的总结,下面有些是自己遇到的,有些是收集的,希望能给大家一些思路 iOS13中presentVi...

  • 【iOS开发】iOS13适配

    iOS13适配掘金论坛总结 1、禁止暗黑模式 Info.plist文件Key值:User Interface St...

  • 自己适配iOS13解决的问题总结

    自己适配iOS13解决的问题总结 1.暗黑模式Dark Mode iOS 13 推出暗黑模式,UIView默认背景...

  • iOS13 适配总结

    1、iOS 13中 presentViewController 模态动画,跳转问题修复 iOS 13之前 pres...

  • iOS13适配总结

    1、UITextField修改placeholder颜色 2、present控制器模态跳转样式 3、全局关闭暗黑模...

  • iOS13适配总结

    1.UINavigationBar 设置按钮边距导致崩溃 2.取消深色模式 3.模态弹出样式 4.私有方法 KVC...

网友评论

      本文标题:iOS13 适配总结

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