swift 监听状态栏frame变化

针对状态栏高度做一些操作

import UIKit

class ViewController: UIViewController {

    private var statusBarFrameObservation: NSKeyValueObservation?

    override func viewDidLoad() {
        super.viewDidLoad()
        
        if let statusBarManager = UIApplication.shared.windows.first?.windowScene?.statusBarManager {
            statusBarFrameObservation = statusBarManager.observe(\.statusBarFrame, options: [.new, .old]) { _, change in
                // 处理状态栏变化
                print("Status bar frame changed from \(change.oldValue) to \(change.newValue)")
            }
        }
    }
}

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SwiftUI中有多种方式可以监听值的变化。最常用的方法是使用`@State`、`@Binding`和`@ObservedObject`属性包装器。 首先,对于简单的值类型,可以使用`@State`属性包装器来监听变化。通过将属性标记为`@State`,使其成为视图的一部分,并且当该属性的值发生变化时,视图将自动重新渲染。例如,下面的代码演示了如何监听一个字符串的变化: ```swift @State private var name = "SwiftUI" var body: some View { VStack { Text("Hello, \(name)!") TextField("Enter your name", text: $name) } } ``` 当用户在文本字段中输入时,`name`属性将随之更新,并且视图将实时更新以反映新的值。 其次,对于需要在不同视图之间共享属性的情况,可以使用`@Binding`属性包装器。通过将该属性标记为`@Binding`,可以在不同的视图之间创建一个双向链接,使它们共享相同的值。当该值在一个视图中改变时,其他视图也会自动更新。以下是一个使用`@Binding`的示例: ```swift struct ContentView: View { @State private var isOn = false var body: some View { VStack { Toggle("Toggle", isOn: $isOn) AnotherView(isOn: $isOn) } } } struct AnotherView: View { @Binding var isOn: Bool var body: some View { Text(isOn ? "ON" : "OFF") } } ``` 在这个例子中,当用户在开关上切换时,`isOn`属性将更新,并且`AnotherView`中的文本将相应地改变。 最后,当需要监听自定义类(如ObservableObject的子类)中的属性变化时,可以使用`@ObservedObject`属性包装器。该属性包装器用于在视图中引用一个可观察对象,并且当该对象的某个属性发生变化时,视图将自动重新渲染。以下是一个使用`@ObservedObject`的示例: ```swift class DataStore: ObservableObject { @Published var counter = 0 } struct ContentView: View { @ObservedObject var dataStore = DataStore() var body: some View { VStack { Text("Counter: \(dataStore.counter)") Button("Increment") { dataStore.counter += 1 } } } } ``` 在这个例子中,`DataStore`是一个可观察对象,其中的`counter`属性通过`@Published`属性包装器进行了标记。当用户点击按钮时,`counter`属性将增加,并且视图将自动重新渲染以反映新的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值