- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到这个问题,当我将一个矩形放在带有渐变填充的 ScrollView 上时,scrollview 停止对触摸使用react。
目的是淡出 ScrollView 底部的项目,这样它们就不会与父 View 中的自定义底部导航 View 发生冲突。
我尝试使用 .frame 修饰符使淡入淡出高度仅在底部四分之一左右,以希望停止阻塞 ScrollView ,但它没有用。
有人知道解决这个问题的方法吗?
import Foundation
import SwiftUI
import CoreData
struct TestView: View {
var managedObjectContext:NSManagedObjectContext
var spendings:FetchedResults<Spending>
var expenses:FetchedResults<Expense>
var settings:FetchedResults<Settings>
@State private var showAddSpending:Bool = false
@Binding var selection:Int
var body: some View{
VStack{
HStack{
Text("Spending").padding()
}.padding(.horizontal)
ZStack{
//List items
ScrollView{
ForEach(self.spendings) { spend in
//if(spend.currentMonth == true){
HStack{
// IS EXPANDED
if spend.isExpanded {
VStack{
HStack{
//NAME
if(spend.currentMonth){
Text("\(spend.name)")
.lineLimit(1)
.frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
.foregroundColor(Color .orange)
.onLongPressGesture {
spend.currentMonth.toggle()
}
} else {
Text("\(spend.name)")
.lineLimit(1)
.frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
.onLongPressGesture {
spend.currentMonth.toggle()
}
}
//AMOUNT
Text("\(spend.amount)")
.frame(minWidth: 0, maxWidth: 70, alignment: .trailing)
//DELETE
DeleteStyle(text: "multiply", symbol: true)
.onTapGesture {
self.managedObjectContext.delete(spend)
do {
try self.managedObjectContext.save()
}catch{
print(error)
}
}
}
VStack{
//CATEGORY
Text("Category: \(spend.category)")
.frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
}
}
.onTapGesture {
spend.isExpanded.toggle()
}
} else {
// ISNT EXPANDED
HStack{
//NAME
if(spend.currentMonth){
Text("\(spend.name)")
.lineLimit(1)
.frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
.foregroundColor(Color .orange)
.onLongPressGesture {
spend.currentMonth.toggle()
}
} else {
Text("\(spend.name)")
.lineLimit(1)
.frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
.onLongPressGesture {
spend.currentMonth.toggle()
}
}
Spacer()
//AMOUNT
Text("\(spend.amount)")
.frame(minWidth: 0, maxWidth: 70, alignment: .trailing)
//DELETE
DeleteStyle(text: "multiply", symbol: true).onTapGesture {
self.managedObjectContext.delete(spend)
do {
try self.managedObjectContext.save()
}catch{
print(error)
}
}
}
.onTapGesture {
spend.isExpanded.toggle()
}
}
}
}
.foregroundColor(Color (UIColor .secondaryLabel))
}.padding(.horizontal)
//Button to add new item
VStack{
Spacer()
HStack{
Spacer()
/*
Text("Total: £\(calculateTotalSpendingForCurrentMonth())")
.foregroundColor(.white)
.padding(15)
.background(Color .orange)
.cornerRadius(40)
*/
if spendings.isEmpty {
HStack{
Text("Record a spend")
Image(systemName: "arrow.right")
}
.foregroundColor(Color (UIColor .secondaryLabel))
.padding(.bottom, 90)
.padding(.horizontal, 40)
}
VStack{
Button(action: {
self.showAddSpending = true
}) {
NavStyle(text: "plus", symbol: true)
}.sheet(isPresented: $showAddSpending) {
AddSpendingView(managedObjectContext: self.managedObjectContext, spendings: self.spendings, expenses: self.expenses)
}
}
}
}
//Black Fade at bottom
VStack{
Spacer()
Rectangle()
.fill (
LinearGradient(gradient: Gradient(colors: [.clear, .black]),
startPoint: .center, endPoint: .bottom)
)
}
}
}.background(Color (UIColor.secondarySystemBackground))
}
}
最佳答案
将 UIViewRepresentable
与 .disabled(true)
结合使用允许与带覆盖的 ScrollView 进行交互。
struct OverlayWrapper<Content: View>: UIViewRepresentable {
var content: Content
init(@ViewBuilder content: @escaping () -> Content) {
self.content = content()
}
func makeUIView(context: Context) -> UIView {
let uiView = UIView()
// Get reference to the SwiftUI view wrapped inside PagerScrollView
let child = UIHostingController(rootView: content)
let screenWidth = UIScreen.main.bounds.width
let screenHeight = UIScreen.main.bounds.height
// Get size of the child
let newSize = child.view.sizeThatFits(CGSize(width: screenWidth, height: screenHeight))
let frame = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height)
child.view.frame = frame
child.view.backgroundColor = UIColor.clear
uiView.frame = frame
uiView.backgroundColor = UIColor.clear
uiView.addSubview(child.view)
return uiView
}
func updateUIView(_ uiView: UIView, context: Context) {
// If the UI is not updated, updateUIView will not be called
}
}
使用 OverlayWrapper
的示例:
struct ExampleView: View {
var body: some View {
ZStack {
ScrollView(.vertical) {
VStack {
ForEach(0..<100) { i in
Text("\(i)")
}
}
}
OverlayWrapper() {
// This can be replaced with any SwiftUI view.
Rectangle()
.frame(width: 200, height: 200)
.foregroundColor(Color.blue.opacity(0.5))
}
.frame(width: 200, height: 200, alignment: .center)
.disabled(true)
}
}
}
关于SwiftUI ScrollView 在带渐变的矩形下停止在 ZStack 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59493480/
我有一个这样的 Zstack: ZStack { Image("beach") .resizable() .edgesIgnoringSafeArea(.all) .sca
我在 ZStack 内的 Rectangle 中添加了一个手势。我有一个 VStack,它是按钮的 View 或菜单。当我将手势添加到矩形时(因为我需要检测菜单按钮后面那个 View 上的点击),然后
我已将 Color.orange 添加到我的 ZStack - 但我的 View 仍然具有默认的白色/灰色背景: struct Settings: View { @State var minA
我正在 SwiftUI 中创建一个自定义的“披露组”,它实现了一种“滑动删除”功能。它的工作原理是将两个矩形堆叠在一起,底部的矩形是滑动时看到的红色“删除”按钮。我还有一个 bool 值,用于标记组件
白色条应该与深色条的左侧对齐。我试过使用间隔器,或改变单个对象的对齐方式,但没有任何效果。这是我的代码: VStack { HStack {
我目前正在尝试按照教程处理 SwiftUI,但不知何故我无法解决一个问题: 我创建了另一个 View ,即我的 HomeView.swift - 该文件包含以下代码: import SwiftUI s
我正在尝试在 ZStack 中创建多个转换。 这是一个测试 View ,其中包含一些文本和一个圆圈,它们都有自己的过渡效果。 struct Test: View { @Binding var
本文整理了Java中org.zstack.header.zone.ZoneInventory类的一些代码示例,展示了ZoneInventory类的具体用法。这些代码示例主要来源于Github/Stac
本文整理了Java中org.zstack.zql.ast.ZQLMetadata类的一些代码示例,展示了ZQLMetadata类的具体用法。这些代码示例主要来源于Github/Stackoverflo
目标是一个菜单,其中:用户点击绿色按钮:显示绿色菜单用户点击蓝色按钮:显示蓝色菜单 我做了什么:设置“当点击绿色时,绿色是 ZStack 中的顶层”的状态。 结果:没有工作:当点击绿色时,它会变为绿色
这个问题在这里已经有了答案: SwiftUI: How to remove margin between views in VStack? (3 个答案) 关闭 2 年前。 当我试图将另一个 VSt
我正在尝试使用 ZStack 和字段的几何形状(位置和大小)将 ListView 直接定位在文本字段下方。这是为了创建一个自动完成的选择列表 设置偏移量似乎只成功了一半。 到目前为止,它看起来如下。
我正在尝试将一个 View 放在一起,该 View 由顶部标题 View 、底部内容 View 和位于顶部的 View 组成,该 View 以分割两个 View 的线为中心。我发现我需要 ZStack
这是我的两个重叠矩形的代码,对它们应用了不透明度。 var body: some View { let r = Rectangle() .foregroundColor(.bl
我正在尝试对齐 Text在 ZStack 中查看。它适用于较大的屏幕,例如 iphone 11 plus max,但在较小的屏幕上,如果我使用如下所示的尾随或前导对齐方式,文本将离开屏幕。我在预览、模
使用 ZStack 有什么区别?与使用 .overlay() 相比修饰符。 苹果 说:ZStack = "覆盖其子项的 View ,使它们在两个轴上对齐。".overlay = "在此 View 前分
我遇到这个问题,当我将一个矩形放在带有渐变填充的 ScrollView 上时,scrollview 停止对触摸使用react。 目的是淡出 ScrollView 底部的项目,这样它们就不会与父 Vie
我遇到这个问题,当我将一个矩形放在带有渐变填充的 ScrollView 上时,scrollview 停止对触摸使用react。 目的是淡出 ScrollView 底部的项目,这样它们就不会与父 Vie
我正在 SwiftUI 中构建自定义修饰符。该修改器的任务之一是将整个内容包装在 ZStack 中。但如果我将此修改器应用到 NavigationView,我会看到一个空白屏幕。 我应该做一些特别的事
如何通过将 View 拖动到另一个 View 的上方或下方来重新排列 View 在 ZStack 中的位置(例如,在这种情况下,我如何通过将卡拖动到另一张卡的上方或下方来重新排列卡组中卡的顺序,以移动
我是一名优秀的程序员,十分优秀!