小编LuL*_*aGa的帖子

如何在 SwiftUI 视图上禁用用户交互?

假设我有一个 SwiftUI 视图层次结构,如下所示:

ZStack() {
    ScrollView {
        ...
    }
    Text("Hello.")
}
Run Code Online (Sandbox Code Playgroud)

Text视图阻止触摸事件到达底层 ScrollView.

使用 UIKit,我会使用类似的东西.isUserInteractionEnabled来控制它,但我找不到任何方法来使用 SwiftUI 来做到这一点。

我试过在文本视图上添加一个Gesture带 aGestureMask.none,但这似乎不起作用。

我希望我在这里遗漏了一些明显的东西,因为我需要在滚动视图的顶部放置一些状态信息。

user-interaction swift swiftui

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

如何在Swift中心UILabel?

我试图集中一些文字,但我似乎没有工作.

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)

这是我正在使用的代码,但这是我得到的:

在此输入图像描述

它不是屏幕的中心.有人能告诉我我做错了什么吗?

uikit uilabel ios swift

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

如何在 Swift UI 中实现本地化

有谁能够帮助我?我在 Swift UI 中找不到任何关于本地化的描述。任何人都可以提供建议或更好地举例说明如何本地化Text()吗?

localization ios swift swiftui xcode11.1

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

SwiftUI .rotationEffect() 框架和偏移

将 .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)

重叠文本

swift swiftui

15
推荐指数
1
解决办法
1724
查看次数

如何在没有固定宽度的情况下让文本包裹在 UILabel(通过 UIViewRepresentable)中?

将 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,这确实会导致文本换行,但似乎没有一个值表示“无论视图大小如何”。

uilabel swift swiftui

14
推荐指数
2
解决办法
4658
查看次数

如何在预览中设置环境对象

我的视图需要一个环境对象,它通过将它添加到 window.rootViewController 在 SceneDelegate 中设置。如何设置用于预览的环境对象?

swift swiftui

12
推荐指数
2
解决办法
5085
查看次数

如何在 SwiftUI 中选择性地传入绑定?

我有一个视图,它在内部管理一个跟踪当前索引的 @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)

问题

我不想强制父视图始终保持索引的状态。换句话说,我想选择性地允许父视图负责状态变量,但默认为可重用视图来维护状态,以防父视图不关心索引。 …

swift swiftui

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

SwiftUI - 解包可选图像数据以基于 UIImage(data) 创建图像

我找到了这个链接,一些答案说我们可以解决两个任务:

  • 如果需要,显示视图元素
  • 或者如果找到 nil 则显示默认值

我的数据模型包含Data正确的可选内容,我将Image其用于View.

!目前,我还没有找到解决此问题并使用此不安全标志的方法:

Image(uiImage: UIImage(data: userService.user.imageData!)!)
Run Code Online (Sandbox Code Playgroud)

当然,我不能保证它,我不应该使用它,但需要帮助如何打开它。

作为一种快速解决方法,我可以将此图像数据属性设置为非可选,然后从本地文件加载一些数据,但即便如此,我仍然需要在此处强制展开UIImage(data

ios swift swiftui

7
推荐指数
2
解决办法
6257
查看次数

如何设置画布预览语言?

(目前正在 Xcode 11 Beta 7 上尝试)

\n\n

我想将已经本地化的字符串传递给 Text() 并使用“.environment(.locale, .init(identifier:"ja"))”查看它在画布上的外观,但预览始终设置为我选择的任何语言已设置方案设置。

\n\n

我知道如果我直接传递 LocalizedStringKey (如 Text("introTitle") ),它会起作用,但我不想这样做。相反,我想使用枚举,例如 Text(L10n.Intro.title),但是当我这样做时,环境运算符会被方案设置语言覆盖。

\n\n

这是错误还是预期行为?

\n\n
struct 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)

xcode localization swift swiftui

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

'Result<Any, AFError>' 类型的值没有成员 'value'

我正在尝试从 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)

xcode ios swift swift5

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