我得到了一个大的(> 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)
当我在 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) 我正在 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 中构建一个聊天应用程序。要在聊天中显示消息,我需要一个反向列表(在底部显示最新条目并自动滚动到底部的列表)。我通过翻转列表及其每个条目创建了一个反向列表(标准方法)。
现在我想将上下文菜单添加到消息中。但长按后,菜单显示信息翻转。我认为这是有道理的,因为它从列表中提取了一条翻转的消息。
关于如何让它发挥作用有什么想法吗?
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 应用程序中,我需要检测屏幕上的任何点击。只检测,然后将其转发到底层视图。作为一个用例,考虑将“在线”用户状态更新发送到服务器以响应任何用户活动。
我当然不想为此目的向每个视图添加手势识别器。我尝试在 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) 我正在 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)