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

    swift 中的协议 当我们在使用协议的时候,我们经常会看到我们定义的协议,需要继承 class· 或者是 NSO...

  • 两年iOS经验之你忽略的小知识点

    两年iOS经验之你忽略的小知识点 两年iOS经验之你忽略的小知识点

  • iOS 使用NetworkExtension创建 VPN(一)

    1、背景知识 iOS 8开始,apple 才开放新的框架NetworkExtension。iOS中的VPN分成个人...

  • ios-收集一些自认为有用的小知识

    ios-收集一些自认为有用的小知识 ios-收集一些自认为有用的小知识

  • iOS 知识-常用小技巧大杂烩

    iOS 知识-常用小技巧大杂烩 - 简书

  • iOS开发笔记:WebKit

    WebKit知识阅览 -- 厚积而薄发 iOS 8 WebKit框架概览(上)iOS中WebKit框架应用与解析 ...

  • iOS 小知识

    UILabel 通过文字计算宽高 UILable *lable=[UILable alloc]init]; lab...

  • iOS小知识

    刷榜 刷榜:指通过技术手段提高APP在iTunes App Store内排行榜的排名,包括iPhone免费排行榜;...

  • ios 小知识

    1.添加了IQKeyboardManager库之后,有些页面在收回键盘时会上移导致无法返回,检查代码后发现是进入页...

  • iOS 小知识

    调整tabbar文字位置 UIOffsetMake(0, -2)第一个参数是设置水平偏移,第二个参数是设置垂直偏移...

网友评论

      本文标题:iOS 小知识8

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