假设我有一个 SwiftUI 视图层次结构,如下所示:
ZStack() {
ScrollView {
...
}
Text("Hello.")
}
Run Code Online (Sandbox Code Playgroud)
该Text视图阻止触摸事件到达底层 ScrollView.
使用 UIKit,我会使用类似的东西.isUserInteractionEnabled来控制它,但我找不到任何方法来使用 SwiftUI 来做到这一点。
我试过在文本视图上添加一个Gesture带 aGestureMask的.none,但这似乎不起作用。
我希望我在这里遗漏了一些明显的东西,因为我需要在滚动视图的顶部放置一些状态信息。
我试图集中一些文字,但我似乎没有工作.
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let title = UILabel()
title.text = "Some Sentence"
title.numberOfLines = 0
title.frame = CGRectMake(self.view.bounds.size.width/2,50,self.view.bounds.size.width, self.view.bounds.size.height) // x , y, width , height
title.textAlignment = .Center
title.sizeToFit()
title.backgroundColor = UIColor.redColor()
self.view.addSubview(title)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的代码,但这是我得到的:
它不是屏幕的中心.有人能告诉我我做错了什么吗?
有谁能够帮助我?我在 Swift UI 中找不到任何关于本地化的描述。任何人都可以提供建议或更好地举例说明如何本地化Text()吗?
将 .rotationEffect() 应用于 Text 时,它会按预期旋转文本,但其框架保持不变。当将旋转视图与非旋转视图(例如 HStack 的 VStack)堆叠时,这会成为一个问题,导致它们重叠。
我最初认为 rotationEffect 会简单地将 Text 的框架更新为垂直,但事实并非如此。
我试过手动设置框架大小和(如果需要,偏移)文本,这有点工作,但我不喜欢这个解决方案,因为它需要一些猜测和检查文本将出现的位置,制作多大框架等。
这就是旋转文本的完成方式,还是有更优雅的解决方案?
struct TextAloneView: View {
var body: some View {
VStack {
Text("Horizontal text")
Text("Vertical text").rotationEffect(.degrees(-90))
}
}
}
Run Code Online (Sandbox Code Playgroud)
将 lineBreakMode 设置为 byWordWrapping 并将 numberOfLines 设置为 0 似乎还不够:
struct MyTextView: UIViewRepresentable {
func makeUIView(context: Context) -> UILabel {
let label = UILabel()
label.lineBreakMode = .byWordWrapping
label.numberOfLines = 0
label.text = "Here's a lot of text for you to display. It won't fit on the screen."
return label
}
func updateUIView(_ view: UILabel, context: Context) {
}
}
struct MyTextView_Previews: PreviewProvider {
static var previews: some View {
MyTextView()
.previewLayout(.fixed(width: 300, height: 200))
}
}
Run Code Online (Sandbox Code Playgroud)
无论我对 lineBreakMode 使用哪种设置,文本都不会换行。画布预览和实时预览都如下所示:
我得到的最接近的是设置 preferredMaxLayoutWidth,这确实会导致文本换行,但似乎没有一个值表示“无论视图大小如何”。
我的视图需要一个环境对象,它通过将它添加到 window.rootViewController 在 SceneDelegate 中设置。如何设置用于预览的环境对象?
我有一个视图,它在内部管理一个跟踪当前索引的 @State 变量。所以像:
struct ReusableView: View {
@State var index: Int = 0
var body: some View {
Text("The index is \(self.index)"
// A button that changes the index
}
}
Run Code Online (Sandbox Code Playgroud)
此视图将在整个应用程序中重复使用。有时父视图需要访问索引,所以我这样重构它:
struct ParentView: View {
@State var index: Int = 0
var body: some View {
ReusableView($index)
}
}
struct ReusableView: View {
@Binding var index: Int
var body: some View {
Text("The index is \(self.index)"
// A button that changes the index
}
}
Run Code Online (Sandbox Code Playgroud)
我不想强制父视图始终保持索引的状态。换句话说,我想选择性地允许父视图负责状态变量,但默认为可重用视图来维护状态,以防父视图不关心索引。 …
我找到了这个链接,一些答案说我们可以解决两个任务:
我的数据模型包含Data正确的可选内容,我将Image其用于View.
!目前,我还没有找到解决此问题并使用此不安全标志的方法:
Image(uiImage: UIImage(data: userService.user.imageData!)!)
Run Code Online (Sandbox Code Playgroud)
当然,我不能保证它,我不应该使用它,但需要帮助如何打开它。
作为一种快速解决方法,我可以将此图像数据属性设置为非可选,然后从本地文件加载一些数据,但即便如此,我仍然需要在此处强制展开UIImage(data。
(目前正在 Xcode 11 Beta 7 上尝试)
\n\n我想将已经本地化的字符串传递给 Text() 并使用“.environment(.locale, .init(identifier:"ja"))”查看它在画布上的外观,但预览始终设置为我选择的任何语言已设置方案设置。
\n\n我知道如果我直接传递 LocalizedStringKey (如 Text("introTitle") ),它会起作用,但我不想这样做。相反,我想使用枚举,例如 Text(L10n.Intro.title),但是当我这样做时,环境运算符会被方案设置语言覆盖。
\n\n这是错误还是预期行为?
\n\nstruct ContentView: View {\n var body: some View {\n Text("introTitle") //this works\n Text(L10n.Intro.title) //this doesn\'t\n }\n}\n\nstruct ContentView_Previews: PreviewProvider {\n static var previews: some View {\n ForEach(["en", "ja", "pt"], id: \\.self) { localeIdentifier in\n ContentView()\n .environment(\\.locale, .init(identifier: localeIdentifier)) //this gets ignored, and only the scheme settings language is previewed\n .previewDisplayName(localeIdentifier)\n }\n }\n}\n\ninternal enum L10n {\n internal enum Intro {\n internal …Run Code Online (Sandbox Code Playgroud) 我正在尝试从 API 获取 JSON 数据,我想在终端上打印它以检查我是否在终端上接收数据,但出现此错误。我目前正在使用 Swift 5 。
import UIKit
import Alamofire
typealias JSON = [String: Any]
class NetworkingService {
static let shared = NetworkingService()
private init() {}
func getPeople(completion: () -> Void) {
AF.request("https://launchlibrary.net/1.4/launchstatus").responseJSON{ (response) in
if let json = response.result.value as? JSON { // here I am getting error
print(json)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)