我的主视图包含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
如何将刚刚添加到我的 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) 我有一个,UILabel但由于某种原因,它的顶部和底部有额外的填充。我希望标签的高度恰好是其中文本的高度。
我一直在寻找其他问题,但似乎找不到真正有效的解决方案。或者解决方案要求您在layoutSubviewsVC的方法中调用某些内容,但我希望所有视图代码都存储在我的视图文件中。
有谁知道如何解决这一问题?
如何在 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
我正在尝试将从 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) 我有一个标记为 的函数@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在后台完成?或者,该异步调用是否也在主线程上运行并阻塞?
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 工作?
我正在尝试使用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
我正在尝试通过在点击"打开"按钮时更改左锚点约束来制作滑出菜单.我见过人们在约束上使用IBOutlets来做,但我正在使用的视图是完全以编程方式完成的,阻止我这样做.
视图最初位于屏幕之外,所以我想我可以在点击"打开"按钮时更改约束,但下面的代码什么也没做.
@objc func slideMenu() {
sideMenu.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 0).isActive = true
view.setNeedsUpdateConstraints()
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有IBOutlet的情况下更新左锚点约束?
如何仅在从数据库加载数据后重新加载 UiTableView。我有一个数据源类,它包含加载所有数据的函数,并在将数据加载到数组中后存储数据。
当我使用 Tableview 访问数据时,虽然它不显示任何内容,因为 tableview 在数据库返回其数据之前加载。加载数据的唯一方法是让我有一个手动重新加载 tableview 的按钮。
从数据库填充数据源对象中的数组后,如何使 tableview 自动重新加载?
我试图检索一个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) 你如何在 SwiftUI 中获得用户位置权限?
我尝试在点击按钮后请求用户位置权限,但对话框在大约一秒钟后消失。即使您最终及时点击它,权限仍然被拒绝。
import CoreLocation
.
.
.
Button(action: {
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.requestWhenInUseAuthorization()
}) {
Image("button_image")
}
Run Code Online (Sandbox Code Playgroud) 通过将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
swift ×10
ios ×9
swiftui ×4
firebase ×3
asynchronous ×2
async-await ×1
autolayout ×1
aws-amplify ×1
database ×1
mapkit ×1
mapping ×1
mkdirection ×1
pagination ×1
position ×1
recursion ×1
task ×1
uilabel ×1
uitableview ×1
view ×1