标签: swift5

具有动态高度的 UICollectionViewLayout - 但不使用流布局

假设您有一个带有普通自定义 UICollectionViewLayout 的 UICollectionView。

所以这不是<<<流布局 - 这是一个正常的自定义布局。

自定义布局很简单,在prepare调用中您只需遍历数据并布置每个矩形即可。所以说这是一个垂直滚动集合......

override func prepare() {
    cache = []
    var y: CGFloat = 0
    let k = collectionView?.numberOfItems(inSection: 0) ?? 0
    // or indeed, just get that direct from your data
    
    for i in 0 ..< k {
        
        // say you have three cell types ...
        let h = ... depending on the cell type, say 100, 200 or 300
        
        let f = CGRect(
            origin: CGPoint(x: 0, y: y ), …
Run Code Online (Sandbox Code Playgroud)

uicollectionview ios12 swift5

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

从 UIHostingController 中的 SwiftUI 调用函数

我有一个 swift UIHostingController,它呈现 SwiftUI。我在视图中调用了一个函数,它确实出现了,它构建得很好,但没有创建预期的输出。

class LoginView: UIHostingController<LoginViewComponent> {
    required init?(coder: NSCoder) {
        super.init(coder: coder, rootView: LoginViewComponent())
    }

    override func viewDidAppear(_ animated: Bool) {
        sessionHandler()
    }

    func sessionHandler(){
        let user = User()
        if user.isLoggedIn(){
            view.isUserInteractionEnabled = false
            print("Authenticating Session")
            self.rootView.loginState(state: "success")
        }else{
            view.isUserInteractionEnabled = true
            print("Needs Logging in")
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

函数 ("loginState(state: "success")") 在 SwiftUI 视图类中调用时有效,但是当从托管控制器调用时它不起作用。

任何帮助将不胜感激。

xcode ios swift swift5 swiftui

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

为什么我们应该使用String.Index而不是Int作为String中Character的索引?

我读过有关 Swift 5 中的 Unicode 的文档String不明白为什么我们不能CharacterString以下位置获取 a :

let someString = ""
let oneCharacter = someString[2] // Error
Run Code Online (Sandbox Code Playgroud)

为什么我们应该使用更复杂的方式来获取 a Character

let strawberryIndex = someString.index(someString.startIndex, offsetBy: 2) // String.Index type
someString[strawberryIndex] // Character()
Run Code Online (Sandbox Code Playgroud)

使用 String.Index 类型有什么意义?

swift swift5

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

SwiftUI 拖动手势因多点触控而冻结

我正在尝试在 SwiftUI 中拖动视图。

拖动工作完美,直到我将第二根手指放在屏幕上,之后拖动停止并且代码块 ( onChanged, onEnded) 都没有被调用。

但是,当我再次开始用一根手指拖动时,它再次开始工作。

有什么办法可以解决这个问题还是我遗漏了一些东西?

struct Pager: View {
  func drag(geometry: GeometryProxy) -> some Gesture {
    DragGesture()
    .onChanged({ (value) in
      //some code
    })
    .onEnded({ (value) in
      //some code
    })
  }

  var body: some View {
    GeometryReader { (geometry) in
      ZStack {
        ForEach(self.items.indices.reversed(), id: \.self) { index in
          Card(index: index, item: self.items[index])
            .offset(x: 0, y: self.offset(index: index, geometry: geometry))
            .animation(.linear)
        }
      }
      .background(Color.black)
      .gesture(self.drag(geometry: geometry))
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

ios swift5 swiftui draggesture

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

均匀对齐 swiftUI 堆栈中的项目

swiftUI Stack 中的项目如何均匀对齐以填满所有可用空间?第一个和最后一个项目应该直接位于父级堆栈框架的开头/结尾,如下所示:

在此输入图像描述

对于熟悉 css 的人来说,所需的行为等于 css3 property display: flex; justify-content: space-between;

alignment swift5 swiftui

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

无法更改 SwiftUI 中 NavigationBarItems 中菜单项的颜色

我在导航栏的前缘和后缘有菜单项。我无法更改菜单项的颜色。但是,我可以更改导航栏本身图标的颜色,但不能更改导航栏下方的菜单项。例如,我希望“删除”显示为红色。我尝试创建一个 ConfigurationStyle 但没有成功。

我的每一侧都有两个菜单项: 在前缘,我有“新建”和“编辑”,并尝试将颜色更改为绿色 在后缘,我有“添加”和“删除”

我究竟做错了什么?很感谢任何形式的帮助。谢谢。

这是我想要做的示例代码。

struct HomeView: View {
    var body: some View {
        NavigationView {
            Text("Hello World")
                .navigationTitle("Title")
                .navigationBarItems(leading: {
                    Menu {
                        Button(action: {}) {
                            Label {
                                Text("New")
                            } icon: {
                                Image(systemName: "pencil")
                            }
                        }.foregroundColor(.green) //tried on the Menu item but does not work
                        Button(action: {}) {
                            Label {
                                Text("Edit").foregroundColor(.green) //tried to change color for individual elements (does not work)
                            } icon: {
                                Image(systemName: "square.and.pencil") // tried to change just for the image (does not work) …
Run Code Online (Sandbox Code Playgroud)

ios swift5 swiftui

6
推荐指数
0
解决办法
393
查看次数

无法将类型“Codable”(又名“Decodable &amp; Encodable”)的值转换为预期参数类型“T.Type”

我正在开发一个处理 JSON 解析的小结构。到目前为止,一切正常,除了我想传递一个自定义结构作为用于解码的结构,JSONDecoder().decode(type.self, from: data)但这会引发以下错误:

无法将类型“Codable”(又名“Decodable & Encodable”)的值转换为预期参数类型“T.Type”

private func parseJson(data: Data, type: Codable) -> Codable? {
    do {
        let decoded = try JSONDecoder().decode(type.self, from: data)
        
        return decoded
    } catch {
        print("JSON decode error: \(error.localizedDescription)")
    }
    
    return nil
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以将结构传递到此方法中以用作函数的类型decode()?如果我直接设置我试图传递到decode()函数上的函数的类型,代码将按预期工作,只有当我尝试传递它时才会出错。

generics xcode json swift swift5

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

TabView Swift UI 中的 NavigationView

我在长时间休息后刚刚拿起 SwiftUI,但我不明白为什么我不能将 aNavigation View放在Tab View.

我希望我的视图Navigation View成为.tabItem主应用程序导航的一部分,所以我正在尝试这样做:

struct ContentView: View {
    var body: some View {
            TabView {
            
        NavigationView {
            
            .tabItem {
                Text("Home")
            }
                    
            Text("Tab bar test")
                .navigationBarTitle("Page One")
        }
}
Run Code Online (Sandbox Code Playgroud)

这不适用于错误消息

Cannot infer contextual base in reference to member 'tabItem'
Run Code Online (Sandbox Code Playgroud)

但是当我尝试这个时

    var body: some View {
        TabView {
        
    NavigationView {
                
        Text("Tab bar test")
            .navigationBarTitle("Page One")
    }
}
    .tabItem {
        Image(systemName: "1.circle")
        Text("Home")
    }
}
Run Code Online (Sandbox Code Playgroud)

它构建得很好,但标签栏不显示。

我希望对其他人有用的主要问题是......

为什么我不能通过直接Navigation View嵌套在标签栏项目中.tabItem …

tabview swift navigationview swift5 swiftui

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

为什么 Swift Tuple 只能在元素数量小于或等于 6 时进行比较?

我在HackingWithSwift==中读到,只有当元素数量小于或等于 6 时,Swift 元组才能与运算符进行比较。这种限制背后的原因是什么?

tuples swift swift5

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

如何获取 Safari iOS 扩展的安装状态?

我想知道我的 iOS safari 扩展在关联的 swift 应用程序中的安装状态。有什么办法可以得到这个吗?

SFSafariExtensionManagergetStateOfSafariExtension 这里似乎只对 macOS safari 扩展有效。iOS 有类似的方法吗?

xcode safari-extension ios swift swift5

6
推荐指数
0
解决办法
242
查看次数