美文网首页
iOS 小知识8

iOS 小知识8

作者: AppleTTT | 来源:发表于2018-06-06 20:27 被阅读89次
    swift 中的协议

    当我们在使用协议的时候,我们经常会看到我们定义的协议,需要继承 class· 或者是 NSObjectProtocol ,那么这两者有什么区别呢?

    继承于 class 的是一个纯的 swift 协议,class 里面没有写明任何方法,但是继承了 NSObjectProtocol 的协议,需要实现 NSObject 里面定义的一系列方法,如下:

     func isEqual(_ object: Any?) -> Bool {
            <#code#>
        }
        
        var hash: Int
        
        var superclass: AnyClass?
        
        func `self`() -> Self {
            <#code#>
        }
        
        func perform(_ aSelector: Selector!) -> Unmanaged<AnyObject>! {
            <#code#>
        }
        
        func perform(_ aSelector: Selector!, with object: Any!) -> Unmanaged<AnyObject>! {
            <#code#>
        }
        
        func perform(_ aSelector: Selector!, with object1: Any!, with object2: Any!) -> Unmanaged<AnyObject>! {
            <#code#>
        }
        
        func isProxy() -> Bool {
            <#code#>
        }
        
        func isKind(of aClass: AnyClass) -> Bool {
            <#code#>
        }
        
        func isMember(of aClass: AnyClass) -> Bool {
            <#code#>
        }
        
        func conforms(to aProtocol: Protocol) -> Bool {
            <#code#>
        }
        
        func responds(to aSelector: Selector!) -> Bool {
            <#code#>
        }
        
        var description: String
    

    大多数时候,我们可能在做业务的时候,比如一个 cell 的代理,使用的是继承 NSObjectProtocol 是因为 cell 的父类帮我们实现了这里面的方法;所以建议,如果是自定义的协议不是需要基于系统给的类或其子类的,使用 class 要更加方便一些

    StoryBoard Reference 使用的坑

    我们在使用 StoryBoard Reference 的时候,要记得一个坑就是,在点击了 Editor -> Refactor to StoryBoard 的时候记得将 StoryBoard 放在 Base.Iproj 这个目录下,不然就会找不到这个 StoryBoard

    另外 Eitor 中有一个 Embed in ,可以给控制器快速添加 tabBarController 或者是 navigationBarController 等等

    LaunchScreen 黑屏问题

    今天在使用多 Target 的时候,发现 LaunchScreen 设置了之后,无效,显示黑屏

    这个问题我花了很多时间去找解决方案,结果非常的蛋疼,原因是我没有给这个 StoryBoard 一个 initial View Controller ,给了之后,就 OK 了

    使用自定义的返回 item

    我们经常会碰到要使用设计师设计的返回 icon,这个时候,如果使用自定义的 leftBarItem,则会失去系统带的返回手势,即使我们使用了第三方库,有了返回手势,但是仍然会使我们的返回动画非常糟糕,如果希望仍然使用系统的返回手势,以及动画,又要满足设计师的需求的话,可以使用如下代码:

    navigationItem.backBarButtonItem = UIBarButtonItem.init(title: "", style: .plain, target: nil, action: nil)
            // 必须两个都设置,不然还是会显示系统的比较粗的箭头
    navigationController?.navigationBar.backIndicatorImage = #imageLiteral(resourceName: "navbar_icon_back")
    navigationController?.navigationBar.backIndicatorTransitionMaskImage = #imageLiteral(resourceName: "navbar_icon_back")
            
    
    在有 WKWebView 的界面使用 navigationBar 大标题的 坑

    很奇怪,在这个界面设置 largeTitleDisplayMode 均无效,都会使用大标题,只有设置 prefersLargeTitles 为 false 之后,才能使用小标题

    修改 UIButton 文字的时候,button 文字闪动问题

    buttontype 设置为 custom 就行了

    navitaionBar 设置透明的问题

    有时候根据 UI 要求,我们需要给导航栏设置为 navigationBar.isTranslucent = false,这样会导致我们有些视图的会往下掉 64 像素,这是因为 view 的布局不是从默认的 64 开始,而是从 0 开始了,这个时候我们需要给 VC 设置 extendedLayoutIncludesOpaqueBars = true ,强制让 vieworigin 为 (0,0)

    相关文章

      网友评论

          本文标题:iOS 小知识8

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