如何在最新的 iOS 14 中仅在 swiftui 中舍入滚动视图的顶角
Posted
技术标签:
【中文标题】如何在最新的 iOS 14 中仅在 swiftui 中舍入滚动视图的顶角【英文标题】:How to round only top corners of a scrollview in swiftui in latest iOS 14 【发布时间】:2021-05-02 05:29:38 【问题描述】:我试图只圆滚动视图的顶角。在 .clipShape() 修饰符中提供自定义形状,在早期的 iOS 版本中可以正常工作,但在最新的 ios 14 中,滚动视图的底部内容正在消失。请提出任何解决方法
以下是圆角的自定义形状:
struct RoundedCorner: Shape
var radius: CGFloat = .infinity
var corners: UIRectCorner = .allCorners
func path(in rect: CGRect) -> Path
let path = UIBezierPath(roundedRect: rect, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
return Path(path.cgPath)
extension View
func cornerRadius(_ radius: CGFloat, corners: UIRectCorner) -> some View
clipShape( RoundedCorner(radius: radius, corners: corners) )
这是实现自定义圆角修饰符的示例视图的代码:
struct SampleView: View
@State var fullname: String
@State var email: String
@State var phone: String
@State var username: String
var body: some View
ZStack
Color(.red).edgesIgnoringSafeArea(.top)
VStack
Header()
ZStack
Color(.systemBackground).edgesIgnoringSafeArea(.bottom)
ScrollView
VStack
Text("Title")
.font(.largeTitle)
.foregroundColor(.primary)
.bold()
.padding()
.frame(maxWidth: .infinity, alignment: .leading)
TextField("type here...", text: $fullname)
.padding()
TextField("type here...", text: $email)
.padding()
TextField("type here...", text: $phone)
.padding()
TextField("type here...", text: $username)
.padding()
TextField("type here...", text: $fullname)
.padding()
TextField("type here...", text: $email)
.padding()
TextField("type here...", text: $phone)
.padding()
TextField("type here...", text: $username)
.padding()
Button(action: , label:
Text("Submit")
.padding()
.textCase(/*@START_MENU_TOKEN@*/.uppercase/*@END_MENU_TOKEN@*/)
)
.padding()
.frame(height: UIScreen.screenHeight/1.5)
.cornerRadius(10, corners: [.topLeft, .topRight])
private struct Header: View
var body: some View
HStack(alignment: .top)
VStack(alignment: .leading)
Text("")
.foregroundColor(Globals.Color.background)
Spacer()
Spacer()
这是底部内容被剪掉的屏幕截图:
【问题讨论】:
【参考方案1】:不要将.cornerRadius
修饰符应用于ScrollView
,而是将其应用于背景:
ZStack
Color(.systemBackground).edgesIgnoringSafeArea(.bottom)
.cornerRadius(10, corners: [.topLeft, .topRight])
ScrollView
//...
【讨论】:
以上是关于如何在最新的 iOS 14 中仅在 swiftui 中舍入滚动视图的顶角的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI:仅在 iOS 14+ 上使用“accessibilityIdentifier”
如何在 Swift iOS 中仅在最后一个屏幕上获取导航栏?
从 api 获取所有数据以及如何在 swift ios 中仅在单元格上附加标题
如何仅在 ASP.NET MVC 中仅显示当前登录用户创建的项目