假设您有一个带有普通自定义 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) 我有一个 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 视图类中调用时有效,但是当从托管控制器调用时它不起作用。
任何帮助将不胜感激。
我读过有关 Swift 5 中的 Unicode 的文档String,但不明白为什么我们不能Character从String以下位置获取 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 类型有什么意义?
我正在尝试在 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) swiftUI Stack 中的项目如何均匀对齐以填满所有可用空间?第一个和最后一个项目应该直接位于父级堆栈框架的开头/结尾,如下所示:
对于熟悉 css 的人来说,所需的行为等于 css3 property display: flex; justify-content: space-between;。
我在导航栏的前缘和后缘有菜单项。我无法更改菜单项的颜色。但是,我可以更改导航栏本身图标的颜色,但不能更改导航栏下方的菜单项。例如,我希望“删除”显示为红色。我尝试创建一个 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) 我正在开发一个处理 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()函数上的函数的类型,代码将按预期工作,只有当我尝试传递它时才会出错。
我在长时间休息后刚刚拿起 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 …
我在HackingWithSwift==中读到,只有当元素数量小于或等于 6 时,Swift 元组才能与运算符进行比较。这种限制背后的原因是什么?
我想知道我的 iOS safari 扩展在关联的 swift 应用程序中的安装状态。有什么办法可以得到这个吗?
SFSafariExtensionManagergetStateOfSafariExtension 这里似乎只对 macOS safari 扩展有效。iOS 有类似的方法吗?