我正在尝试使用 UIHostingController 将 SwiftUI 视图添加到 UIKit 视图,并且它显示额外的间距(此示例是为了模拟生产应用程序上的问题而制作的)。这是屏幕截图。

布局概览:
View
UIStackView
UIImageView
UIView(red)
UIHostingController
UIView(blue)
Run Code Online (Sandbox Code Playgroud)
问题: 快速 UI 视图 (UIHostingController) 显示在红色和蓝色视图之间,它在分隔线之后显示额外的间距。间距根据 SwiftUI 视图的大小而变化。
如果我减少行数(Hello World 文本)或减少间距,它似乎工作正常。
这是完整的源代码(https://www.sendspace.com/file/ux0xt7):
ViewController.swift(主视图)
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var mainStackView: UIStackView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
addView()
}
private func addView() {
mainStackView.spacing = 0
mainStackView.alignment = .fill
let imageView = UIImageView()
imageView.image = UIImage(named: "mountain")
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true …Run Code Online (Sandbox Code Playgroud) 复制/粘贴在带有 M1 Macbook Pro 模拟器的 Xcode 13 上不起作用。它可以在普通的 Mac PC 上运行。
我在配备 macOS Big Sur 11.6 的 Macbook Pro (Intel/2019) 上使用 Xcode 13
我正在运行 iOS 15.0 的连接 iPhone X 上构建并启动该应用程序,同时我还在运行基于 XCUITest 的 UI 测试套件。
该应用程序需要很长时间才能启动(2 分钟以上),然后它会在启动屏幕上再停留 2-3 分钟。同时,Xcode 显示附加的警报:
我有两个问题:
我的代码很简单;我有一个 UIButton 的出口,button我正在代码中设置它的图像:
let jack = UIImage(named:"jack.png")
self.button.setImage(jack, for:.normal)
Run Code Online (Sandbox Code Playgroud)
问题是这并不像我预期的那样。我希望按钮图像的大小缩小到按钮大小,并且我希望它是模板图像(用继承的色调颜色着色)。相反,我看到的是原始图像,而且它是全尺寸的。这是 iOS 15 中的变化吗?
似乎是这样,因为如果我将项目的部署目标设置为 iOS 14 并在 iOS 14 模拟器上运行它,我确实会得到我期望的行为。
在 iOS15 中运行以下代码时,内容中的 URL 或电子邮件地址的颜色使用强调色而不是前景色。我怎样才能覆盖它?
Text("Send a message to john@email.com to request support")
.foregroundColor(.blue)
Run Code Online (Sandbox Code Playgroud)
我想确认我在 iOS 上开发的应用程序的电池使用情况,特别是在 Xcode 13 和 iOS 15 上。(注意:此应用程序之前在以前版本的 iOS 上没有显示电池使用问题。)
\n以前,收集能源使用信息似乎有两种方法:
\n#1. 在设备上的“设置”>“开发者”>“日志记录”下
\n#2. 使用“能量日志”模板通过仪器进行分析
\n深入研究Xcode 13 发行说明,我发现了以下内容:
\n\n\n仪器不再包含能量模板;请改用 Xcode Organizer 中的指标报告。(74161279)
\n
当我在 Xcode(12 或 13)中访问管理器时,选择一个应用程序并单击该应用程序所有版本的“Energy”,它显示以下内容:
\n\n\n\n\n“在某些情况下,该窗格显示\xe2\x80\x9c可用的使用数据不足,\xe2\x80\x9d,因为参与的用户设备可能没有报告足够的匿名数据。发生这种情况时,请尝试在几天后回来查看。”
\n
经过一年多的生产并拥有足够的安装数量,我有一种感觉,等待几天可能没有多大作用。 …
在 iOS 14 中,当应用程序在 SwiftUI 中启动时,它可以显示 ATT(应用程序跟踪透明度)对话框,如下所示。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
if #available(iOS 14, *) {
ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
// loadAd()
})
} else {
// loadAd()
}
return true
}
Run Code Online (Sandbox Code Playgroud)
但是,在 iOS 15.0 中,它不起作用。苹果文档描述如下。
仅当应用程序状态为:UIApplicationStateActive 时才会提示调用 API。通过应用扩展调用 API 不会提示。 https://developer.apple.com/documentation/apptrackingtransparency/attrackingmanager/3547037-requesttrackingauthorization
如何在 iOS 15 中应用程序启动时显示 ATT 对话框?
2021/9/28更新 我解决如下。
struct HomeView: View {
var body: some View {
VStack {
Text("Hello!")
}.onReceive(NotificationCenter.default.publisher(for: UIApplication.didBecomeActiveNotification)) { …Run Code Online (Sandbox Code Playgroud) 我们有一个企业帐户,直到 iOS 14 都没有问题,但一旦用户将手机更新到 iOS 15,他们就会收到此警报。
此应用程序的开发人员需要更新它才能与此版本的 iOS 配合使用
现在,只有在 iOS 15 上运行的企业应用程序才会出现此问题。我做了一些研究并找到了这篇文章。https://developer.apple.com/documentation/xcode/using-the-latest-code-signature-format。
在这里它指出
要检查名为 MyApp.app 的应用程序是否具有新签名,您可以使用
协同设计实用程序:%协同设计-dv /path/to/MyApp.app
在输出中查找字符串,例如 CodeDirectory v=20500。对于任何小于 20400 的 v 值,您需要重新签名您的应用程序。
我这样做了,我的输出确实是 v=20400。我已使用在 Mac OS 11.2.3 上运行的 Xcode 12.5 签署了该应用程序。我认为苹果文档对此不正确。(我可能是错的)
任何人都可以帮忙并告诉我,我们到底需要做什么才能解决这个问题?
编辑:我能够通过将操作系统升级到 Big Sur 来解决这个问题。Xcode 版本为 12.5。
在 iOS 15 上的 Safari 中,已应用容器中的链接在稍后设置为动态pointer-events: none;时不会变得可点击。事实上,在某些情况下确实如此,但这是非常不可预测的。例如,当容器是 an并且链接位于元素内部时,它们确实变得可点击。或者当链接有同级时。我知道这听起来很奇怪,但这是事实。我做了一个演示,所以你可以自己尝试一下:https://stackblitz.com/edit/web-platform-mdhjqs?file =index.htmlpointer-eventsallullibutton
我错过了什么吗?这是 iOS 15 上 Safari 独有的错误吗?
ios15 ×10
ios ×4
swiftui ×3
xcode ×3
xcode13 ×3
swift ×2
autolayout ×1
battery ×1
css ×1
enterprise ×1
instruments ×1
lldb ×1
safari ×1
swiftui-text ×1
tabbar ×1
uibutton ×1