【问题标题】:SwiftUI: Shadow glitch after context menuSwiftUI:上下文菜单后的阴影故障
【发布时间】:2020-12-29 13:28:39
【问题描述】:

我有一个带阴影的矩形和一个上下文菜单。当我关闭此上下文菜单时,矩形的阴影会延迟(约 0.5 秒)出现。完整矩形的阴影以及内部元素的阴影。我不确定我做错了什么。

struct Playground: View {
    var body: some View {
        VStack(alignment: .leading, spacing: 4.0) {
            Spacer()
            HStack {
                Spacer()
                Image(systemName: "house")
                    .font(.system(size: 50))
                Spacer()
            }
            Text("SwiftUI for iOS 14").fontWeight(.bold).foregroundColor(Color.white)
            Text("20 Sections").font(.footnote).foregroundColor(Color.white)
        }
        .frame(width: 200, height: 300)
        .padding(.all)
        .background(Color.blue)
        .cornerRadius(20.0)
        .shadow(radius: 10)
        .contentShape(RoundedRectangle(cornerRadius: 20))
        .contextMenu(menuItems: {
            Text("Menu Item 1")
            Text("Menu Item 2")
            Text("Menu Item 3")
        })
    }
}

【问题讨论】:

  • 尝试在设备上运行
  • 我在 iPhone 8 上试过。同样的问题。它可以在您的模拟器上运行吗?
  • 有同样的问题,但我没有使用 SwiftUI。看起来上下文菜单有私人阴影,与用户的阴影冲突
  • @kirkyoyx 你解决过这个问题吗?我有同样的问题,虽然是正常的 UIKit。

标签: swiftui


【解决方案1】:

我找到了一种解决问题的巧妙方法。这是使用纯 UIKit 和 Objective-C,但它也可以在 SwiftUI 中以一种或另一种方式完成。

这是对动画视图的临时直接通过子视图访问,我只是将阴影附加到它。这样动画视图就会有一个阴影,当真正的阴影出现时,它会在这个阴影下方出现。结果看起来不错。

-(void)contextMenuInteraction:(UIContextMenuInteraction *)interaction 
      willEndForConfiguration:(UIContextMenuConfiguration *)configuration 
                     animator:(id<UIContextMenuInteractionAnimating>)animator {
  // TODO: Find view dynamically /safer
  UIView *platter = (UIView*)self.view.window.subviews[1].subviews[1].subviews[0];
  platter.clipsToBounds = NO;
  platter.layer.shadowOffset = CGSizeMake(0, 0);
  platter.layer.shadowRadius = 5;
  platter.layer.shadowOpacity = 0.5;
  platter.layer.shadowColor = [UIColor blackColor].CGColor;
}

这适用于 iOS 13。尚未在 iOS 14 上尝试过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2012-10-18
    • 2013-01-12
    • 1970-01-01
    相关资源
    最近更新 更多