相关疑难解决方法(0)

Swift 3.1弃用了initialize().我怎样才能实现同样的目标?

Objective-C声明了一个类函数initialize(),在使用之前对每个类运行一次.它经常被用作交换方法实现(混合)等的入口点.

Swift 3.1弃用了这个函数并带有警告:

方法'initialize()'定义了Objective-C类方法'initialize',它不能保证被Swift调用,并且在将来的版本中将被禁止

如何解决这个问题,同时仍保持我目前使用initialize()入口点实现的相同行为和功能?

objective-c ios swift

41
推荐指数
3
解决办法
1万
查看次数

方法在Swift中调整

UINavigationBar我正试图克服一个小问题.当您prefersStatusBarHidden()在视图控制器中使用方法隐藏状态栏时(我不想禁用整个应用程序的状态栏),导航栏会丢失属于状态栏的高度的20pt.基本上导航栏缩小了.

在此输入图像描述 在此输入图像描述

我正在尝试不同的解决方法,但我发现它们中的每一个都有缺点.那时,我发现这次来到类别,其使用方法交叉混合,添加了一个名为属性fixedHeightWhenStatusBarHiddenUINavigationBar解决了这个问题类.我在Objective-C中进行了测试,但它确实有效.以下是原始Objective-C代码的标题实现.

现在,因为我在Swift中使用我的应用程序,所以我尝试将其转换为Swift.

我遇到的第一个问题是Swift扩展无法存储属性.所以我不得不解决计算属性来声明fixedHeightWhenStatusBarHidden使我能够设置值的属性.但这引发了另一个问题.显然,您无法为计算属性赋值.像这样.

self.navigationController?.navigationBar.fixedHeightWhenStatusBarHidden = true
Run Code Online (Sandbox Code Playgroud)

我得到错误无法分配给这个表达式的结果.

无论如何,下面是我的代码.它编译没有任何错误,但它不起作用.

import Foundation
import UIKit

extension UINavigationBar {

    var fixedHeightWhenStatusBarHidden: Bool {
        return objc_getAssociatedObject(self, "FixedNavigationBarSize").boolValue
    }

    func sizeThatFits_FixedHeightWhenStatusBarHidden(size: CGSize) -> CGSize {

        if UIApplication.sharedApplication().statusBarHidden && fixedHeightWhenStatusBarHidden {
            let newSize = CGSizeMake(self.frame.size.width, 64)
            return newSize
        } else {
            return sizeThatFits_FixedHeightWhenStatusBarHidden(size)
        }

    }
    /*
    func fixedHeightWhenStatusBarHidden() -> Bool {
        return objc_getAssociatedObject(self, "FixedNavigationBarSize").boolValue
    }
    */

    func setFixedHeightWhenStatusBarHidden(fixedHeightWhenStatusBarHidden: Bool) …
Run Code Online (Sandbox Code Playgroud)

objective-c ios swift method-swizzling

10
推荐指数
1
解决办法
9135
查看次数

标签 统计

ios ×2

objective-c ×2

swift ×2

method-swizzling ×1