我昨天将我的 xcode 升级到 11.4,现在我无法存档我的 SwiftUI 代码以提交 appstore,因为错误:“错误:分段错误:11”,“xxx-master.dia:1:1:无法读取序列化诊断文件:无法加载文件:无法打开诊断文件”。
有什么建议吗?
更新:我找到了答案并解决了这个问题:(仅供参考:SwiftUI - UITextField 中的状态更改导致 frameWidth 不受控制地增长并忽略 bounds/frame)
func makeUIView(context: UIViewRepresentableContext<MyField>) -> UITextField {
let field = UITextField(frame: .zero)
field.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
Run Code Online (Sandbox Code Playgroud)
当我在其中输入越来越多的文本时,即使设置了框架宽度,文本字段也会变得越来越宽。
public struct FoolTextField: UIViewRepresentable {
@Binding var text: String
private let textField = UITextField(frame: .zero)
public init(_ placeholder: String, text: Binding<String>) {
_text = text
textField.text = text.wrappedValue
textField.placeholder = placeholder
textField.borderStyle = .none
textField.clearButtonMode = .whileEditing
textField.returnKeyType = .done
}
...
}
FoolTextField("placeholder", text: $text).frame(width: 200)
Run Code Online (Sandbox Code Playgroud) 我的应用程序使用cloudkit+coredata,同步工作正常,但我发现最近的项目有一天没有出现在另一部iPhone上,我认为同步停止了。所以我添加一些调试信息并发生错误:
21-12-10 16:13:58.089 CKDBManager[128], processCloudkitEventChanged( :)[c]: 事件(设置)开始 21-12-10 16:13:58.301 CKDBManager[133], processCloudkitEventChanged( :)[c] :事件(设置)在 0.21 秒内成功完成 21-12-10 16:14:01.218 CKDBManager[128],processCloudkitEventChanged( :) [c]:事件(设置)开始 21-12-10 16:14:01.280 CKDBManager [133],processCloudkitEventChanged( :)[c]:事件(设置)在 0.06 秒内成功完成 21-12-10 16:14:01.286 CKDBManager[128],processCloudkitEventChanged(:) [c]:事件(导入)开始21-12-10 16:14:02.372 CKDBManager[133], processCloudkitEventChanged( :)[c]: 事件(导入)在 1.09 秒内成功完成 21-12-10 16:14:02.378 CKDBManager[128], processCloudkitEventChanged( :)[c]: 事件(导出)于 21-12-10 16:14:02.388 CKDBManager[133], processCloudkitEventChanged( :)[c]: 事件(导出)在 0.01 秒内成功完成 21-12-10 16 :14:12.741 CKDBManager[128], processCloudkitEventChanged( :)[c]: 事件(导出)开始 21-12-10 16:14:12.756 CKDBManager[133], processCloudkitEventChanged( : )[c]: 事件(导出)完成在 0.02 秒内成功 21-12-10 16:14:12.762 CKDBManager[128], processCloudkitEventChanged( :)[c]: 事件(导入)开始 21-12-10 16:14:13.169 CKDBManager[131], processCloudkitEventChanged( :)[c]:事件(导入)错误:错误域=CKErrorDomain代码=12“(空)” …
我从 coredata 中列出了音频项目。删除后,崩溃报告为“EXC_BREAKPOINT (code=1, subcode=0x1b8fb693c)”,为什么?
使用时
ForEach(items, id: \.self)
Run Code Online (Sandbox Code Playgroud)
, 有用。但我的音频具有 id 属性并遵循可识别协议。
更新:我发现添加 if{} 子句可以修复崩溃,但为什么呢?断点在“静态 UUID。unconditionallyBridgeFromObjectiveC ( :) ()”。
struct Test1View: View {
@Environment(\.managedObjectContext) var context
@FetchRequest(fetchRequest: Audio.fetchAllAudios()) var items: FetchedResults<Audio>
var body: some View {
List {
ForEach(items) { item in
if true { // <- this if clause fix crash, but why?
HStack {
Text("\(item.name)")
}
}
}.onDelete(perform: { indexSet in
let index = indexSet.first!
let item = self.items[index]
self.context.delete(item)
try? self.context.save()
})
}
}
}
Run Code Online (Sandbox Code Playgroud)
代码如下: …
RectangleView有滑动动画,他的子TextView有旋转动画。我想当 Go! 时, RectangleView 及其子组件(TextView)作为一个整体滑入屏幕(easeInOut)!按下,并且 TextView 永远旋转(线性)。但实际上,子 TextView 与父级分离,旋转(线性)和滑动(线性),并且永远重复。
为什么动画应用到父级效果子级动画?
struct AnimationTestView: View {
@State private var go = false
var body: some View {
VStack {
Button("Go!") {
go.toggle()
}
if go {
RectangleView()
.transition(.slide)
.animation(.easeInOut)
}
}.navigationTitle("Animation Test")
}
}
struct RectangleView: View {
var body: some View {
Rectangle()
.frame(width: 100, height: 100)
.foregroundColor(.pink)
.overlay(TextView())
}
}
struct TextView: View {
@State private var animationRotating: Bool = false
let animation = Animation.linear(duration: 3.0).repeatForever(autoreverses: false)
var body: some …Run Code Online (Sandbox Code Playgroud) @Asperi 的解决方案,ScrollView().id(UUID().uuidString)。
列表项中有一个滚动视图,当我滚动列表时,滚动视图中的内容消失了。
我认为问题是关于滚动视图和列表可重用项目冲突。
如果我删除滚动视图(只是 hstack{}),则任何内容都不会消失。所以我认为这是滚动视图的问题。有什么理想吗?
struct ContentView: View {
var body: some View {
List {
ForEach(0...100, id: \.self) { _ in
ItemView().padding()
}
}
}
}
struct ItemView: View {
var body: some View {
VStack(alignment: .leading) {
Text("Tag list:")
ScrollView(.horizontal, showsIndicators: false) {
HStack {
ForEach(0...8, id: \.self) { _ in
TagView1()
}
}
}.id(UUID().uuidString) /// <- fix
}
}
}
struct TagView1: View {
var body: some View {
Text("Tag\(String(UUID().uuidString.prefix(5)))")
.foregroundColor(.secondary)
.padding(.horizontal, 2)
.background(RoundedRectangle(cornerRadius: 4).stroke(Color.secondary.opacity(0.5)))
.padding(1) …Run Code Online (Sandbox Code Playgroud) 我只想在点击列表项的任意位置时执行某些操作。
当点击项目的 Text() 时一切正常,但是当我点击项目的空白区域时,什么也没有发生,为什么?
struct ItemView: View {
var body: some View {
HStack {
Text("Hello")
Spacer()
Text("world")
}
}
}
struct ListView: View {
var body: some View {
List() {
ForEach((1...10).reversed(), id: \.self) { index in
ItemView().onTapGesture {
print("item \(index) taped")
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
-=-=-=
我做了一些实验,它们太奇怪了!!!
如果点击 Text hello,则打印“hello”;
如果点击空白区域,则打印“world”;
如果点击文本世界,则打印点击的“item 0”;
struct ItemView: View {
var body: some View {
HStack {
Text("Hello").onTapGesture {
print("hello tapped")
}
Spacer()
Button(action: {
print("world tapped")
}) {
Text("world") …Run Code Online (Sandbox Code Playgroud) 更新:错误:类型'_'没有成员'1',如果在list-foreach中放置一个if闭包(if !self.showMarkedOnly || name.marked {}),为什么?
代码版本 4:
struct Name: Identifiable, Hashable {
var id: String = UUID().uuidString
var name: String
var marked: Bool
init(_ name: String, marked: Bool = false) { self.name = name; self.marked = marked }
}
struct TestView: View {
@State private var list: [Name] = [Name("test1"), Name("test2"), Name("test3", marked: true), Name("test4"), Name("test5", marked: true), Name("test6"), Name("test7"), Name("test8")]
@State private var showMarkedOnly = false
var body: some View {
VStack{
Toggle(isOn: $showMarkedOnly) { Text("show marked only") } …Run Code Online (Sandbox Code Playgroud)