标签: ios13

使用UISearchController时,iOS 13 UIBarButtonItem不可单击且UINavigationBars重叠

我有一个导航栏,其中包含一些UIBarButtonItem按钮和类似的UISearchBar挂钩

var searchController: UISearchController!

override func viewDidLoad() {
    super.viewDidLoad()

    title = "Test"

    tableView.delegate = self
    tableView.dataSource = self

    searchController = UISearchController(searchResultsController: nil)
    navigationItem.searchController = searchController

    // This leads to the bug
    searchController.hidesNavigationBarDuringPresentation = false

    navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(leftTapped))
    navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(rightTapped))
}
Run Code Online (Sandbox Code Playgroud)

场景:我点击搜索栏,然后点击取消。

  • 问题1:除非我触摸屏幕的最外面的像素,否则条形按钮对触摸没有反应(仅在模拟器和鼠标单击时才可能)。

  • 问题2:当我按下另一个视图控制器时,导航项重叠

在此处输入图片说明

当我使用hidesNavigationBarDuringPresentation = true它时,它的工作就像预期的那样。


该问题出现在使用Xcode 11.0和11.1的带槽口和非带槽口的iPhone iOS 13.0和13.1上。

这是整个测试项目:https : //github.com/fl034/HidesNavigationBarDuringPresentationTest


我已经提起雷达(您也应该提起诉讼),但是也许你们中的有些人已经找到了解决方法?


更新1:iOS …

uinavigationcontroller ios uisearchcontroller ios13

36
推荐指数
2
解决办法
1504
查看次数

Xcode 11.1 GM Seed 附带的 iOS Simulator (11.1) 似乎无法启动 iOS 13.1 设备

我正在运行 Mac OS X Mojave 10.14.6。我安装的唯一应用程序是新下载的 Xcode 11.1 GM Seed (11A1027)。这个系统上没有以前的文件、项目或应用程序,因为我只是想开始学习 Swift 编程。

在 Xcode 中,我为单视图 iOS 应用程序创建了一个新项目。我编译它没有任何更改,构建成功。默认情况下,它会在 iOS 13.1 上启动 iPhone 11 Pro Max。

模拟器启动,设备窗口出现,进度条显示一段时间。过了一会儿,黑屏上出现了一个旋转的指示器,但什么也没发生。这持续了几分钟,之后 Xcode 显示此错误:

打开“com.example.FoodTracker”的请求失败。意外的错误类型。

Details:

The request to open "com.example.FoodTracker" failed.
Domain: FBSOpenApplicationServiceErrorDomain
Code: 5
Failure Reason: Unexpected error type.
User Info: {
    BSErrorCodeDescription = InvlaidResponse;
}
--
The operation couldn't be completed.
(BSServiceConnectionErrorDomain error 3.)
Domain: BSServiceConnectionErrorDomain
Code: 3
User Info: {
    BSErrorCodeDescription = OperationFailed;
}
--
Run Code Online (Sandbox Code Playgroud)

我让设备在模拟器中运行了很长一段时间,但它从未停止旋转。

我尝试重新安装 Xcode,删除了 DerivedData 目录,进行了干净构建,重新安装了一些 Xcode 组件,但我认为 …

xcode ios-simulator ios13

35
推荐指数
2
解决办法
9243
查看次数

iOS 13 TestFlight 不报告崩溃,只有feedback.json

使用 iOS 13 的新功能来报告 TestFlight 版本的崩溃,在某些应用程序上,我遇到了一个问题,该问题仅feedback.json在没有实际崩溃报告的情况下报告。有什么可以启用的吗?

值得一提的是,crashalitics 已启用并且不报告任何崩溃。

更新:所以经过一些调查,我发现reports without a crash logs are system terminations. 就我而言,当我从手机中提取设备日志时0xbadf000d,其中一个含义是系统在后台终止了一个长进程。似乎它一直在那里,但是通过 iOS13 Testflight 反馈,它会在弹出窗口中变得可见。

顺便说一句,来自 Xcode“设备和模拟器”的日志不知何故与手机上的日志不同步。

外卖:面临手动模拟崩溃报告的需要,因此发现了非常有用的 stackoferlow 帖子:https ://stackoverflow.com/a/45207863/3032917

crash-reports ios testflight ios13

35
推荐指数
2
解决办法
2988
查看次数

如何在 SwiftUI 中配置用于删除和禁用的 ContextMenu 按钮?

我试图在 中配置按钮contextMenu,但它不起作用。

Text("A label that have context menu")
    .contextMenu {
        Button(action: {
            // remove it
        }) {
            Text("Remove")
                .foregroundColor(.red) // Not working
            Image(systemName: "trash")
        }.disabled(true) // Not working
    }
Run Code Online (Sandbox Code Playgroud)

我拥有的:

 不工作的样子

我在寻找什么:(删除呼叫按钮)

演示

我会创建一个UIAction类似以下的内容,UIKit但我找不到任何修饰符或无论如何将其带到SwiftUI

let delete = UIAction(title: "Remove", image: UIImage(systemName: "trash"), attributes: .destructive) { action in
    // remove it
}
Run Code Online (Sandbox Code Playgroud)

contextmenu swift ios13 swiftui

35
推荐指数
2
解决办法
4248
查看次数

Xcode 11-在iOS 13上退出UISceneDelegate / SwiftUI

我当前正在使用Xcode 11 Beta5。在我的应用程序中,它可以在iOS 12及更低版本上正常运行。但是,在iOS 13上,默认情况下似乎使用的是UIScene。这导致我的应用无法执行任何操作。

当应用程序以全新安装方式启动时,用户必须接受条款和条件。同意后,他们进入加载屏幕,然后将其定向到主视图。在我发布的屏幕截图中,当前当前前景背后的视图是启动加载屏幕。

我们将很快考虑在整个应用程序中添加多视图场景支持,但是现在我们需要处理更高优先级的内容。

https://imgur.com/i0qLhAL

该应用程序目标的“常规”设置中的“支持多个窗口”已被禁用。另外,我在info.plist文件中将“启用多个Windows”设置为“否”。

到目前为止,什么都没有真正起作用。基本上我想选择退出/禁用多个窗口和UIScene / SwiftUI以恢复iOS 10-12中的原始行为。这可能在iOS 13中还是我们必须对其进行更新?

更新:

这是视图调试层次结构的屏幕截图。左侧是iOS 12,右侧是iOS13。没有在Info.plist中添加任何内容,也没有添加任何场景委托类或方法,为什么会有不同?几乎可以在Xcode 11的现有生产就绪代码中运行它。

https://imgur.com/C3aLsDo

xcode swift ios13 swiftui

33
推荐指数
3
解决办法
8134
查看次数

@Published 属性包装器不适用于 ObservableObject 的子类

我有一个符合@ObservableObject 协议的类,并从它创建了一个子类,它有自己的变量,带有@Published 属性包装器来管理状态。

使用子类时似乎忽略了@published 属性包装器。有谁知道这是否是预期行为以及是否有解决方法?

我正在运行 iOS 13 Beta 8 和 xCode Beta 6。

这是我所看到的一个例子。更新MyTestObjectText 视图上的 TextField 时,会使用 aString 值正确更新。如果我更新MyInheritedObjectTextField,则不会在 Text 视图中更新 anotherString 值。

import SwiftUI

class MyTestObject: ObservableObject {
    @Published var aString: String = ""

}

class MyInheritedObject: MyTestObject {
    @Published var anotherString: String = ""
}

struct TestObserverWithSheet: View {
    @ObservedObject var myTestObject = MyInheritedObject()
    @ObservedObject var myInheritedObject = MyInheritedObject()

    var body: some View {
        NavigationView {
            VStack(alignment: .leading) {
                TextField("Update aString", text: self.$myTestObject.aString) …
Run Code Online (Sandbox Code Playgroud)

inheritance ios swift ios13 swiftui

30
推荐指数
2
解决办法
6870
查看次数

尝试获取应用程序方向时,iOS 13.0 中不推荐使用“statusBarOrientation”

简单地说,我依靠以下代码来提供应用程序的方向。在应用程序中使用它有几个原因:

  • 根据 UX 规范,stackview 的布局是根据 iPad 的方向设置的(横向时为水平,纵向时为垂直)
  • 在上一项的基础上,stackview 被放置在屏幕的左侧(纵向)或顶部(横向)
  • 有自定义轮换逻辑,根据状态做出不同的响应。tl;dr 是在 iPad 上,该应用程序在方向之间呈现出显着差异

在这种情况下,我只是负责维护,并且无法做出偏离当前(并且正常运行)布局逻辑的重大更改。

截至目前,它依赖于以下内容来捕获应用程序方向:

var isLandscape: Bool {
    return UIApplication.shared.statusBarOrientation.isLandscape
}
Run Code Online (Sandbox Code Playgroud)

但是,对于 Xcode 11 GM 版本,我收到了以下弃用警告:

'statusBarOrientation' 在 iOS 13.0 中被弃用:改用窗口场景的 interfaceOrientation 属性。

如何通过状态栏获取应用程序的方向?

ios swift ios13

30
推荐指数
5
解决办法
2万
查看次数

在未显示正确的用户代理的情况下,如何在iOS 13的Safari中检测设备名称?

在实现Apple iOS 13之后,我意识到iPad iOS 13的Safari中的window.navigator.userAgent与MacOS相同。像这样:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Safari/605.1.15

如您所见,这是iPad的错误用户代理,甚至无法检测当前设备是否为iDevice。


经过初步研究,我找到了解决方法:

转到设置-> Safari->请求桌面网站->所有网站。您会注意到默认情况下启用了 “所有网站” 。如果禁用它并获取window.navigator.userAgent,则现在将显示正确的用户代理。

但我不能要求每个用户对每个设备进行此设置更改。因此,我试图找到另一种方法,最后编写了以下代码,检查它是否是Safari,macOS和触摸屏,然后该设备应该是苹果移动设备,但是我想知道是否有更好的建议/方法在Safari iOS 13中检测到正确的设备名称?

detectOs = function(){
   //returns OS name, like "mac"
};

//is Safari on an apple touch-screen device
isSafariInIdevice = function(){
   if (/Safari[\/\s](\d+\.\d+)/.test(windows.navigator.userAgent)) {
      return 'ontouchstart' in window && detectOs() === "mac";      
   }
   return false;
};
Run Code Online (Sandbox Code Playgroud)

javascript safari user-agent ios ios13

30
推荐指数
1
解决办法
5607
查看次数

addSubView SwiftUI View to UIKit UIView in Swift

我试图将SubView SwiftUI 视图添加到UIView。 self.view.addSubview(contentView)

错误:无法将“ContentView”类型的值转换为预期的参数类型“UIView”

请帮我实现这个 UI。

import UIKit
import SwiftUI

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        view.backgroundColor = UIColor.lightGray

        let contentView = ContentView()
        view.addSubview(contentView) // Error: Cannot convert value of type 'ContentView' to expected argument type 'UIView'
    }


}


struct ContentView: View {
    var body: some  View {
        Text("Hello world")
    }

}
Run Code Online (Sandbox Code Playgroud)

uikit ios13 swiftui xcode11

28
推荐指数
1
解决办法
2万
查看次数

iOS 13-使用UISearchBar _searchField的自定义SearchBar无法正常工作

在Xcode-11-Beta(ios13)之前,以下代码用于自定义searchbar值以获取使key正常工作的键值。现在低于崩溃日志。

'NSGenericException',原因:'禁止访问UISearchBar的_searchField ivar。这是一个应用程序错误”

- (UITextField *)textField
{
 return [self valueForKey:@"_searchField"];
}
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏。

objective-c uisearchbar ios13 xcode11

28
推荐指数
5
解决办法
1万
查看次数