小编mal*_*hal的帖子

如何在 SwiftUI 中使用 onReceive 从 ObservedObject 获取数据?

在我的 SwiftUI 应用程序中,每次值更改时我都需要从 ObservedObject 获取数据。我知道我们可以用 .onReceive 做到这一点?我不太了解 Apple 的文档。我不知道我怎么能做到这一点。

我的代码:

import SwiftUI
import CoreLocation

struct Compass: View {
  
  @StateObject var location = LocationManager()
  @State private var angle: CGFloat = 0
  
  var body: some View {
    VStack {
      Image("arrow")
        .resizable()
        .aspectRatio(contentMode: .fit)
        .frame(width: 300, height: 300)
        .modifier(RotationEffect(angle: -CGFloat(self.angle.degreesToRadians)))
        .onReceive(location, perform: {
          withAnimation(.easeInOut(duration: 1.0)) {
            self.angle = self.location.heading
          }
        })
      
      Text(String(self.location.heading.degreesToRadians))
        .font(.system(size: 20))
        .fontWeight(.light)
        .padding(.top, 15)
    }
  }
}

struct RotationEffect: GeometryEffect {
  var angle: CGFloat

  var animatableData: CGFloat {
    get { …
Run Code Online (Sandbox Code Playgroud)

swift swiftui combine

21
推荐指数
3
解决办法
2万
查看次数

带有 PageTabViewStyle 的 TabView 上的edgesIgnoringSafeArea 不起作用

通过 using 将 TabView 用作 pageviewer.tabViewStyle(PageTabViewStyle())工作正常,但试图通过应用让它从边缘运行到边缘edgesIgnoringSafeArea似乎不起作用。

我在这里缺少什么?

struct ContentView: View {
    let colors: [Color] = [.red, .green, .blue]
    var body: some View {
        TabView {
            ForEach(0...2, id: \.self) { index in
                Rectangle()
                    .fill(colors[index])
            }
        }
        .tabViewStyle(PageTabViewStyle())
        .edgesIgnoringSafeArea(.all)
    }
}
Run Code Online (Sandbox Code Playgroud)

TabView + PageTabViewStyle + edgeIgnoringSafeArea

将另一个添加 .edgesIgnoringSafeArea(.all)RectangleorForEach也不起作用。

请注意,所有这些问题都不同,因为它们使用 use PageTabViewStyle()

ios swiftui ios14

21
推荐指数
5
解决办法
2419
查看次数

取消交互式UINavigationController pop手势不会调用UINavigationControllerDelegate方法

如果你在a中拖动UIViewController以开始a 中的交互式弹出过渡UINavigationController,UIViewController则当前的一个已经viewWillAppear:调用,然后是UINavigationControllerDelegate方法navigationController:willShowViewController:animated:

如果取消的过渡,既viewWillAppear:viewDidAppear:预期得到所谓的顶视图控制器.

然而,无论是委托方法navigationController:willShowViewController:animated:navigationController:didShowViewController:animated:调用的.

考虑到调用UIViewController视图生命周期方法,似乎至少应调用其中一个或两个.我想知道这是故意还是错误UIViewController.

我真正需要的是能够看到在我的UINavigationController子类或其中取消交互式弹出的时间UINavigationController.有明显的方法吗?

编辑

我仍在寻找解决方案,但我想提一下,我已将此问题报告为Apple的错误.查看文档,没有理由不调用这些委托方法,特别是考虑到调用等效的视图生命周期方法.

EDIT2

我的雷达车票(16823313)今天(2015年5月21日)关闭并按预定标记.:(

Engineering已根据以下信息确定此问题的行为符合预期:

这实际上是正确的行为.从B - > A发生的导航转换,如果你在转换中取消它,你将不会得到didShowViewController:方法.取消这种转变不应被视为从A - > B过渡,因为你从未真正到过A.

view [Will/Did]出现仍应按预期调用.

这种情况相当糟糕,因为它是违反直觉的,但我的答案中的解决方法在可预见的未来应该可以正常工作,至少在我的用例中是这样.

objective-c uikit uinavigationcontroller ios

20
推荐指数
2
解决办法
5089
查看次数

是什么导致容器视图保持其子视图的框架与其边界匹配?

我试图更好地理解容器视图在故事板中的工作原理.行为似乎是容器视图将强制其子视图调整大小以填充容器.

故事板关系

我没有看到解释它的约束,也没有提到它是什么类.这似乎是一些故事板的魔力.

限制

我假设容器视图必须是一个子类UIView,我会猜测并假设它被调用UIContainerView,但搜索文档只会产生两个结果.

搜索结果

那么它是怎样工作的?

objective-c uikit ios

14
推荐指数
1
解决办法
9118
查看次数

如何在 SwiftUI 中将 @FetchRequest 与新的可搜索修饰符一起使用?

是否可以将 new.searchable与 结合使用@FetchRequest

我有这样的代码:

struct FooListView: View {
    @Environment(\.managedObjectContext) private var viewContext
    
    @FetchRequest(
        sortDescriptors: [NSSortDescriptor(keyPath: \Foo.name, ascending: true)],
        animation: .default)
    private var items: FetchedResults<Foo>

    @State var searchText = ""

    var body: some View {
        NavigationView {
            List {
                ForEach(items) { item in
                    NavigationLink(destination: FooView(Foo: item)) {
                        Text(item.wrappedName)
                    }
                }
                .onDelete(perform: deleteItems)
            }
            .searchable(text: $searchText)
            .navigationTitle("Foos")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想使用 来searchText过滤我的FetchedResults.

searchable swift swiftui fetchrequest

11
推荐指数
2
解决办法
3030
查看次数

SwiftUI 文本字段触发器手动提交 iOS

我遇到的问题是decimalFormatter不会触发和更新绑定,除非textField 触发提交事件,即点击返回。

因此,我正在寻找如何手动触发文本字段提交事件?

下面的格式化程序代码将采用任何数字,并确保它始终有一个小数位(IE -- 10.5),并且如果插入了字母字符,这也正是我想要的,还将输入恢复为以前的有效输入。

import SwiftUI
import Combine

struct StandardRegimen: View {
    @State private var totalDose = 6000.0

    private var decimalFormatter: NumberFormatter = {
        let f = NumberFormatter()
        f.isLenient = true
        f.numberStyle = .none
        f.maximumFractionDigits = 1
        f.minimumFractionDigits = 1
        f.alwaysShowsDecimalSeparator = true
        return f
    }()

    var body: some View{
       return
       VStack(alignment:.center,spacing:10){
            TextField("?", value:$totalDose, formatter: self.decimalFormatter, onCommit: {
               print("COMMITED!");
            }).font(.system(size: 25.0))
            .textFieldStyle(RoundedBorderTextFieldStyle())
            .keyboardType(.decimalPad)
       }
    }
Run Code Online (Sandbox Code Playgroud)

如果删除修饰符代码.keyboardType(.decimalPad)并按键盘上的返回键,它将触发COMMITED 消息并关闭键盘

但是, …

ios swiftui

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

CKFetchNotificationChangesOperation有时不会返回UPDATE,DELETE通知

CKFetchNotificationChangesOperation返回INSERT操作,但UPDATE和DELETE并不总是如此.DELETE,UPDATE在我向App Store提交应用程序时最后工作,但现在不再了.为什么?我创建了以下订阅:

let s = CKSubscription(recordType: recordType, predicate: NSPredicate(value: true), options: .FiresOnRecordCreation | .FiresOnRecordUpdate | .FiresOnRecordDeletion)
s.notificationInfo = CKNotificationInfo()
subscriptionsToSave.append(s)
Run Code Online (Sandbox Code Playgroud)

仪表板显示所有树触发器:

在此输入图像描述

我没有使用任何alertBody,所以通知是一个所谓的无声通知,它可能是原因吗?

CloudKit提示和技巧讲师说,订阅需要从开发人员门户打开应用程序ID的APS功能.我不认为我有,但我只想要提取通知,只有在这有效时才推送.

背景能力? - 同样的

需要在app的信息plist中设置APS环境密钥. - 我想我拥有它.

ios cloudkit ckfetchnotificationchange

8
推荐指数
1
解决办法
594
查看次数

php-fpm 在 osx 上获取其配置值的位置

我正在尝试在我的 osx 上运行 php-fpm:

php-fpm -t
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

[30-Dec-2017 13:36:12] ERROR: failed to open error_log (/usr/var/log/php-fpm.log): No such file or directory (2)
[30-Dec-2017 13:36:12] ERROR: failed to post process the configuration
[30-Dec-2017 13:36:12] ERROR: FPM initialization failed
Run Code Online (Sandbox Code Playgroud)

我没有那个文件也不能创建它 - 即使使用 sudo:

$:/usr $ sudo mkdir var
Password:
mkdir: var: Operation not permitted
Run Code Online (Sandbox Code Playgroud)

所以我的下一个大动作是在php-fpm配置中找到这个日志文件目录设置的确切位置(以便我可以决定日志文件应该去哪里)..似乎有很多配置文件,所以我参考了这个问题在找到我的 php-fpm 配置文件的位置。所以在我的php -i文件的输出中,我有这个:

'--sysconfdir=/usr/local/etc/php/7.1'
Run Code Online (Sandbox Code Playgroud)

我有以下文件:

php-fpm.conf

// can't be coming from this file
// b/c this is telling me it's /usr/local/var/log/php-fpm.log

; …
Run Code Online (Sandbox Code Playgroud)

php macos homebrew fpm

8
推荐指数
1
解决办法
7264
查看次数

如何将 Swift 宏与 @Observable 和 @Environment 一起使用?

我正在尝试通过以下代码使用 @Observable 和 @Environment 来使用新的 Swift 宏:

import SwiftUI
import Observation

@Observable class Note {
    var text = ""
}

struct ContentView: View {
    @State var note = Note()
    
    var body: some View {
        FormView()
            .environment(note)
    }
}

struct FormView: View {
    @Environment(Note.self) var note
    
    var body: some View {
        Form {
            TextField("write here", text: $note.text)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,无法构建并出现以下错误:

Cannot find '$note' in scope

删除$in 的$note结果是:

Cannot convert value of type 'String' to expected argument …

xcode swift swift5 swiftui swift-macro

7
推荐指数
1
解决办法
1265
查看次数

SwiftUI TabView 更改页面时内存占用不断增加

struct ContentView: View {
    
    @State private var selectedIdx = 0
    
    var body: some View {
        TabView(selection: $selectedIdx) {
            ForEach(0..<5) { idx in
                Text("\(idx)")
            }
        }
        .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
    }
}
Run Code Online (Sandbox Code Playgroud)

环境:Xcode 12.2 iOS 14.2

当我在页面之间滑动时,SwiftUI 内存中的 TabView 不断增加。运行仪器,我没有看到任何泄漏,但分配和持久内存不断增加。

理想情况下,即使每次都重新创建页面,5 个页面消耗的总内存(如上面的代码)也不应该改变。

这是 SwiftUI 中的错误吗?或者我错过了什么?

swiftui ios14 swiftui-tabview

6
推荐指数
1
解决办法
648
查看次数