小编Arm*_*man的帖子

了解Postgres行大小

我得到了一个大的(> 100M行)Postgres表,其结构为{integer,integer,integer,timestamp without time zone}.我期望一行的大小为3*整数+ 1*时间戳= 3*4 + 1*8 = 20字节.

实际上,行大小pg_relation_size(tbl) / count(*)= 52字节.为什么?

(不对表进行删除:pg_relation_size(tbl, 'fsm')〜= 0)

postgresql storage database-design types

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

SwiftUI:在 NavigationView 中破坏了显式动画?

当我在 NavigationView 中放置显式动画时,作为不良副作用,它会为 NavigationView 内容的初始布局设置动画。无限动画会变得特别糟糕。有没有办法禁用这种副作用?

示例:下图应该是全屏蓝色背景上的红色动画加载器。相反,我得到了缩放蓝色背景的无限循环:

在此处输入图片说明

import SwiftUI

struct EscapingAnimationTest: View {
    var body: some View {
        NavigationView {
            VStack {
                Spacer()
                EscapingAnimationTest_Inner()
                Spacer()
            }
            .backgroundFill(Color.blue)
        }
    }
}

struct EscapingAnimationTest_Inner: View {
    @State var degrees: CGFloat = 0
    
    var body: some View {
        Circle()
            .trim(from: 0.0, to: 0.3)
            .stroke(Color.red, lineWidth: 5)
            .rotationEffect(Angle(degrees: degrees))
            .onAppear() {
                withAnimation(Animation.linear(duration: 1).repeatForever(autoreverses: false)) {
                    degrees = 360
                }
            }
    }
}

struct EscapingAnimationTest_Previews: PreviewProvider {
    static var previews: some View {
        EscapingAnimationTest()
    }
}
Run Code Online (Sandbox Code Playgroud)

animation swiftui

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

SwiftUI:ContextMenu 翻转错误?

我正在 SwiftUI 中实现聊天。我使用双旋转列表在底部显示最新的聊天消息。每条消息都附有一个上下文菜单。但有一个错误:当点击上下文菜单时,该消息会执行错误的旋转动画。看起来很糟糕。使用 XCode 12.2。

有什么想法如何让它发挥作用吗?我确实向苹果提交了错误报告,但这通常需要几个月(几年?)。

这是基本示例:

import SwiftUI

struct FlippedContextMenuBug: View {
    var body: some View {
        ScrollView {
            ForEach(0..<100) { i in
                Text("Message \(i)")
                    .padding()
                    .contextMenu(menuItems: {
                        Text("Menu Item 1")
                    })
                    .rotationEffect(.pi)
            }
        }
        .rotationEffect(.pi)
    }
}

struct FlippedContextMenuBug_Previews: PreviewProvider {
    static var previews: some View {
        FlippedContextMenuBug()
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你!

swiftui

10
推荐指数
0
解决办法
837
查看次数

SwiftUI 聊天应用程序:颠倒列表和上下文菜单的困境

我正在 SwiftUI 中构建一个聊天应用程序。要在聊天中显示消息,我需要一个反向列表(在底部显示最新条目并自动滚动到底部的列表)。我通过翻转列表及其每个条目创建了一个反向列表(标准方法)。

现在我想将上下文菜单添加到消息中。但长按后,菜单显示信息翻转。我认为这是有道理的,因为它从列表中提取了一条翻转的消息。

关于如何让它发挥作用有什么想法吗?

在此输入图像描述

import SwiftUI

struct TestView: View {
    var arr = ["1aaaaa","2bbbbb", "3ccccc", "4aaaaa","5bbbbb", "6ccccc", "7aaaaa","8bbbbb", "9ccccc", "10aaaaa","11bbbbb", "12ccccc"]

    var body: some View {
        List {
            ForEach(arr.reversed(), id: \.self) { item in
                VStack {
                    Text(item)
                        .height(100)
                        .scaleEffect(x: 1, y: -1, anchor: .center)
                }
                .contextMenu {
                    Button(action: { }) {
                        Text("Reply")
                    }
                }
            }
        }
        .scaleEffect(x: 1, y: -1, anchor: .center)

    }
}

struct TestView_Previews: PreviewProvider {
    static var previews: some View {
        TestView()
    }
}
Run Code Online (Sandbox Code Playgroud)

swiftui

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

在 SwiftUI 中检测并转发屏幕上任意位置的点击

在 SwiftUI 应用程序中,我需要检测屏幕上的任何点击。只检测,然后将其转发到底层视图。作为一个用例,考虑将“在线”用户状态更新发送到服务器以响应任何用户活动。

我当然不想为此目的向每个视图添加手势识别器。我尝试在 SceneDelegate 中添加一个全局的。只要检测到任何点击,这都有效:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {        
    // ... snip other code
    initGlobalTapRecognizer()
}

// MARK: UIGestureRecognizerDelegate
extension SceneDelegate: UIGestureRecognizerDelegate {
    func initGlobalTapRecognizer() {
        let tapGesture = UITapGestureRecognizer(target: self, action: nil)
        tapGesture.delegate = self
        window?.addGestureRecognizer(tapGesture)
    }

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
        print("tapped")
        return true
    }
}
Run Code Online (Sandbox Code Playgroud)

但这会破坏一些 SwiftUI 控件。例如,按钮可以工作,但 TabView 不再响应点击。

我尝试了另一种方式,simultaneousGesture按照这里的建议使用:

struct ContentView: View {
    @State var selectedTab: Int = …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui

5
推荐指数
2
解决办法
783
查看次数

在 SwiftUI 中制作聊天应用程序:如何使 ScrollView 在键盘出现时保持其位置?

我正在 SwiftUI 中制作一个聊天应用程序。这是我想要的效果:在 Telegram 或 Whatsapp 中打开任何聊天,点击输入框。当键盘向上滑动时,聊天内容也会向上滑动。因此,如果您正在查看底部消息,您仍然可以看到它。

我无法在 SwiftUI 中获得这种效果。键盘向上滑动不滑动聊天内容:

import SwiftUI

struct SlidingKeyboardTest: View {
    @State var inputText = "Placeholder"
    
    var body: some View {
        VStack {
            ScrollView {
                LazyVStack {
                    ForEach(1...100, id: \.self) { id in
                        HStack {
                            Spacer()
                            Text("message \(id)")
                            Spacer()
                        }
                    }
                }
            }
            TextEditor(text: $inputText)
                .frame(height: 50)
        }
        .background(LinearGradient(gradient: Gradient(colors: [.white, .blue, .white]), startPoint: .top, endPoint: .bottom))
        .onTapGesture { UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) }
    }
}

struct SlidingKeyboardTest_Previews: PreviewProvider {
    static var …
Run Code Online (Sandbox Code Playgroud)

swiftui

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

标签 统计

swiftui ×5

animation ×1

database-design ×1

ios ×1

postgresql ×1

storage ×1

swift ×1

types ×1