SwiftUI中NavigationLink按钮触发范围覆盖全屏问题求助
问题原因与解决方案
问题出在你给Rectangle添加了.position()修饰符,这会迫使它的父视图(也就是NavigationLink)扩展到整个ZStack的尺寸——因为.position()是基于父视图的坐标系来定位子视图的,这意味着父视图必须足够大才能容纳这个位置。最终导致整个屏幕都变成了NavigationLink的可点击区域。
修复代码
把.position()修饰符从Rectangle移到NavigationLink本身,这样NavigationLink会保持和Rectangle一样的尺寸,仅在矩形区域内响应点击:
NavigationView { ZStack { NavigationLink(destination: ContentView() .navigationBarBackButtonHidden(true)) { Rectangle() .frame(width: 300, height: 183) .foregroundColor(Color(red: 0.11, green: 0.11, blue: 0.11, opacity: 0.5)) } .position(.init(x: 160, y: 170.0)) // 将定位修饰符移到NavigationLink上 } }
额外说明
- 如果需要矩形尺寸自适应但不超过指定最大值,可以保留
maxWidth和maxHeight,替换width和height即可。 - 若不想使用
.position(),也可以用.offset()配合ZStack的对齐方式来定位,但需要根据屏幕中心计算偏移量,.position()在已知精确坐标时更直接。
内容的提问来源于stack exchange,提问作者Adam Leszczyński
相关产品推荐
相关产品推荐

