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 文字闪动问题
将 button
的 type
设置为 custom
就行了
navitaionBar 设置透明的问题
有时候根据 UI
要求,我们需要给导航栏设置为 navigationBar.isTranslucent = false
,这样会导致我们有些视图的会往下掉 64 像素,这是因为 view
的布局不是从默认的 64 开始,而是从 0 开始了,这个时候我们需要给 VC 设置 extendedLayoutIncludesOpaqueBars = true
,强制让 view
的 origin
为 (0,0)
网友评论