小编yam*_*mbo的帖子

使用导航链接在视图之间导航时使用匹配几何效果

我的主视图包含CustomView,点击时可通过 来打开详细视图NavigationLink。详细视图还包含CustomView,只是位置不同。

CustomView我可以使用匹配几何效果在单击导航链接时对位置进行过渡/动画吗?

struct HomeView: View {
    @Namespace var namespace
    
    var body: some View {
        NavigationStack {
            VStack {
                Text("Top")
                NavigationLink {
                    DetailView(namespace: namespace)
                } label: {
                    CustomView()
                        .matchedGeometryEffect(id: "testId", in: namespace)
                }
                Text("Bottom")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
struct DetailView: View {
    var namespace: Namespace.ID
    
    var body: some View {
        VStack {
            CustomView()
                .matchedGeometryEffect(id: "testId", in: namespace)
            Text("Details")
            Spacer()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

swift swiftui swiftui-navigationlink swiftui-animation swiftui-transition

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

将文档的文档 ID 添加到其自己的 Firestore 文档 - Swift 4

如何将刚刚添加到我的 firestore 数据库中的文档的文档 ID 添加到所述文档?

我想这样做,以便当用户检索“乘车”对象并选择预订它时,我可以知道他们预订了哪个特定的乘车。

我面临的问题是在创建文档之前您无法获取文档 ID,因此将其添加到所述文档的唯一方法是创建文档,读取其 ID,然后编辑文档以添加身份证。在规模上,这将根据需要创建两倍的服务器调用。

有没有标准的方法来做到这一点?或者一个简单的解决方案来知道用户预订了哪个“乘车”并在数据库中相应地对其进行编辑?

struct Ride {
    var availableSeats: Int
    var carType: String
    var dateCreated: Timestamp
    var ID: String // How do I implement this?
}


func createRide(ride: Ride, completion: @escaping(_ rideID: String?, _ error: Error?) -> Void) {
    // Firebase setup
    settings.areTimestampsInSnapshotsEnabled = true
    db.settings = settings

    // Add a new document with a generated ID
    var ref: DocumentReference? = nil
    ref = db.collection("rides").addDocument(data: [
        "availableSeats": ride.availableSeats,
        "carType": ride.carType,
        "dateCreated": ride.dateCreated,
        "ID": ride.ID, …
Run Code Online (Sandbox Code Playgroud)

ios firebase swift google-cloud-firestore

9
推荐指数
1
解决办法
7774
查看次数

从 UILabel 中删除顶部和底部填充

我有一个,UILabel但由于某种原因,它的顶部和底部有额外的填充。我希望标签的高度恰好是其中文本的高度。

我一直在寻找其他问题,但似乎找不到真正有效的解决方案。或者解决方案要求您在layoutSubviewsVC的方法中调用某些内容,但我希望所有视图代码都存储在我的视图文件中。

有谁知道如何解决这一问题?

在此处输入图片说明

uilabel ios swift

9
推荐指数
1
解决办法
2426
查看次数

如何在 SwiftUI 中相对于其左上角定位视图

如何在 swiftUI 中相对于其左上角定位视图?“位置”修饰符相对于它们的中心坐标移动视图。所以.position(x: 0, y: 0)在屏幕的左上角放置一个视图中心坐标。

我想在屏幕左上角放置一个视图左上角坐标,我该怎么做?

struct HomeView: View {
    var body: some View {
        VStack(alignment: .leading) {
            Text("Top Text")
                .font(.system(size: 20))
                .fontWeight(.medium)
             Text("Bottom Text")
                .font(.system(size: 12))
                .fontWeight(.regular)
        }
        .position(x: 0, y: 0)
    }
}
Run Code Online (Sandbox Code Playgroud)

目前,我的视图的左半部分被截断了屏幕,我该如何防止?另外,我如何相对于安全区域对齐?

我想念 UIKit

在此处输入图片说明

position view ios swiftui

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

将数据从 Firestore 映射到 Swift 中的结构 - IOS

我正在尝试将从 Firestore 数据库中检索到的“用户”映射到我在代码中定义的用户结构,但我认为我没有正确理解 swift 中的映射功能。

如何将检索到的用户映射到结构中?

结构

struct User {
// Properties

    var firstName: String
    var lastName: String
    var userName: String
    var email: String

    init(firstName: String, lastName: String, userName: String, email: String) {
        self.firstName = firstName
        self.lastName = lastName
        self.userName = userName
        self.email = email
    }
}
Run Code Online (Sandbox Code Playgroud)

从 Firestore 获取用户的函数

func getUser(UID: String) {
    // Firebase setup
    settings.areTimestampsInSnapshotsEnabled = true
    db.settings = settings

    db.collection("users").document(UID).getDocument { (document, error) in
        if let error = error {
            print("Error: \(error.localizedDescription)")
        } else {
            print(document!.data()!) …
Run Code Online (Sandbox Code Playgroud)

mapping ios firebase swift google-cloud-firestore

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

标有 @MainActor 的函数中的异步调用是否也在主线程上运行?

我有一个标记为 的函数@MainActor,它进行异步调用,然后更新一个@Publishedvar,该 var 随后将更新 UI。异步调用是否会在主线程上阻塞,或者发布的变量的更新是否是主线程上唯一要做的事情?

@Published var users: [User] = []

@MainActor
func getUsers() {
    Task {
        // Is the async call blocking on the main thread here?
        users = await userRepository.getUsers()
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,是否users在主线程上更新,而异步调用发生UserRepository在后台完成?或者,该异步调用是否也在主线程上运行并阻塞?

asynchronous task async-await swift swiftui

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

放大 CLI 命令不起作用 - M1 Mac

npm install -g @aws-amplify/cli我在 M1 Mac 上安装了 Amplify CLI 。

当我amplify在终端运行时,什么也没有发生。一条新的终端线随即出现。没有错误,只是换了一行。跑步amplify help amplify -v amplify configure什么都不做。

% amplify help
% 
Run Code Online (Sandbox Code Playgroud)

如何让 amplify cli 工作?

amazon-web-services aws-amplify aws-amplify-cli

4
推荐指数
1
解决办法
1680
查看次数

使用Firebase Firestore分页-Swift 4

我正在尝试使用Firestore对数据进行分页(无限滚动我的表视图)。我已经尽我所能集成了google为分页提供的代码,但是我仍然无法正确加载数据。

初始数据集将根据需要加载到表视图中。然后,当用户点击屏幕底部时,将加载下一个“ x”项。但是,当用户第二次点击屏幕底部时,将相同的“ x”项简单地附加到表中视图。相同的项目会无限期地添加。

因此,其最初的3个“骑乘”对象,随后的4个“骑乘”对象将永远重复。

123 4567 4567 4567 4567 ...

如何正确加载数据?

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let offsetY = scrollView.contentOffset.y
    let contentHeight = scrollView.contentSize.height

    if offsetY > contentHeight - scrollView.frame.height {
        // Bottom of the screen is reached
        if !fetchingMore {
            beginBatchFetch()
        }
    }
}

func beginBatchFetch() {
    // Array containing "Ride" objcets is "rides"

    fetchingMore = true

    // Database reference to "rides" collection
    let ridesRef = db.collection("rides")

    let first = ridesRef.limit(to: 3)

    first.addSnapshotListener { (snapshot, err) in
        if …
Run Code Online (Sandbox Code Playgroud)

pagination infinite-scroll firebase swift google-cloud-firestore

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

在没有IBOutlets的情况下以编程方式更新布局约束 - Swift

我正在尝试通过在点击"打开"按钮时更改左锚点约束来制作滑出菜单.我见过人们在约束上使用IBOutlets来做,但我正在使用的视图是完全以编程方式完成的,阻止我这样做.

视图最初位于屏幕之外,所以我想我可以在点击"打开"按钮时更改约束,但下面的代码什么也没做.

@objc func slideMenu() {
    sideMenu.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 0).isActive = true
    view.setNeedsUpdateConstraints()
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在没有IBOutlet的情况下更新左锚点约束?

ios autolayout swift hamburger-menu

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

从数据库中检索数据后重新加载 UiTableView - Swift

如何仅在从数据库加载数据后重新加载 UiTableView。我有一个数据源类,它包含加载所有数据的函数,并在将数据加载到数组中后存储数据。

当我使用 Tableview 访问数据时,虽然它不显示任何内容,因为 tableview 在数据库返回其数据之前加载。加载数据的唯一方法是让我有一个手动重新加载 tableview 的按钮。

从数据库填充数据源对象中的数组后,如何使 tableview 自动重新加载?

database asynchronous uitableview ios

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

递归函数,带完成块,检索多个 MKDirections - Swift

我试图检索一个MKRoute包含多条路线的数组,这些路线都从同一个地方开始,但每条路线都有不同的目的地。

问题是我能想出的唯一方法是通过递归函数,但我找不到任何关于如何使用带有完成块的递归函数的信息。由于加载路由是异步完成的,因此需要一个完成块。

我如何获得以下功能但带有完成块?“添加到退货”功能?

func factorial(of num: Int) -> Int {
    if num == 1 {
        return 1
    } else {
        return num * factorial(of:num - 1)
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的功能代码

func getDirections(originCoordinate: CLLocationCoordinate2D, destinationCoordinates: [CLLocationCoordinate2D], completion: @escaping(_ routes:[MKRoute]?, _ error: Error?) -> Void) {

    // Origin is the same for each route, what changes is the destination
    // A singular origin coordinate with an array of destination coordinates is passed in
    // The function would in theory be recursive, …
Run Code Online (Sandbox Code Playgroud)

recursion mapkit ios swift mkdirection

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

在 SwiftUI 中请求用户位置权限

你如何在 SwiftUI 中获得用户位置权限?

我尝试在点击按钮后请求用户位置权限,但对话框在大约一秒钟后消失。即使您最终及时点击它,权限仍然被拒绝。

import CoreLocation
.
.
.
Button(action: {
    let locationManager = CLLocationManager()
    locationManager.requestAlwaysAuthorization()
    locationManager.requestWhenInUseAuthorization()
}) {
    Image("button_image")
}
Run Code Online (Sandbox Code Playgroud)

core-location user-permissions ios swift swiftui

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

重绘时保持集合视图单元格重叠

通过将minimumLineSpacing集合视图布局的属性设置为负数,我让我的单元格重叠。但是,当我滚动并重绘单元格时,它们现在以相反的方向重叠。我在下面放了图片。

在此处输入图片说明 在此处输入图片说明

当滚动集合视图并重绘单元格时,如何保持单元格重叠,如第一张图片所示?

import UIKit

class PopularView: UIView {

let cellID = "cellID"

// MARK: - Views
let collectionView: UICollectionView = {
    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = .vertical
    layout.minimumLineSpacing = -55     // -------Allows Overlap-----
    layout.itemSize = CGSize(width: SCREEN_WIDTH, height: 185)
    layout.minimumInteritemSpacing = 17
    let view = UICollectionView(frame: CGRect.zero, collectionViewLayout: layout)
    view.backgroundColor = .white
    return view
}()



// MARK: - Initializers
override init(frame: CGRect) {
    super.init(frame: frame)
    collectionView.dataSource = self
    collectionView.register(PopularCell.self, forCellWithReuseIdentifier: cellID)

    backgroundColor = .white
    setupCollectionView()
}

required …
Run Code Online (Sandbox Code Playgroud)

ios uicollectionview uicollectionviewcell uicollectionviewlayout swift

0
推荐指数
1
解决办法
1971
查看次数