我有一个带有阴影和上下文菜单的矩形。当我关闭此上下文菜单时,矩形的阴影会出现延迟(约 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")
})
}
}
Run Code Online (Sandbox Code Playgroud)
我找到了一种巧妙的方法来缓解这个问题。这是使用纯 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;
}
Run Code Online (Sandbox Code Playgroud)
这适用于 iOS 13。尚未在 iOS 14 上尝试过。
归档时间: |
|
查看次数: |
772 次 |
最近记录: |