如何在SwiftUI地图上方放置按钮/视图?

时间:2020-08-02 02:47:54

标签: swiftui mapkit

我找不到将我的buttonView(只是一个Button)放在地图顶部的方法,所以我可以点击它。 在另一个更复杂的设置中,按钮会以某种方式在顶部打开,我可以点击它,但这是运气,并非设计使然。如何在地图上获取我的buttonView以便可以点击它?

请注意,我认为问题可能是我的buttonView在某个地图图层“下方”,因此地图捕获了点击事件,而没有将它们传递给我的buttonView。

Xcode 12 beta-3,mac catalina,目标ios 14。

@helper GetTreeView(List<MVCTreeview.SiteMenu> siteMenu, int parentID){
    foreach (var i in siteMenu.Where(a=>a.ParentMenuID.Equals(parentID)))
    {
        <li>
            @{var submenu = siteMenu.Where(a => a.ParentMenuID.Equals(i.MenuID)).Count();}
            @if (submenu > 0)
            {
            <span class="collapse collapsible">&nbsp;</span>
            }
            else
            {
                <span style="width:15px; display:inline-block">&nbsp;</span>
            }
            <span>
                <a href="@i.NavURL">@i.MenuName</a>
            </span>
            @if (submenu > 0)
            {
                <ul>
                    @Treeview.GetTreeView(siteMenu,i.MenuID) 
                    @* Recursive  Call for Populate Sub items here*@
                </ul>
            }
        </li>
    }
}

2 个答案:

答案 0 :(得分:0)

只需将它们包装在 ZStack 中:

ZStack {
    Map(coordinateRegion: $region, annotationItems: cityAnno){...}
    Button(action: {print("----> buttonView action")}) {...}
}

答案 1 :(得分:0)

您可以在 Just Vstack 上获得 onTapGesture。通过替换 MapViewer 的主体尝试以下代码。

var body: some View {
    Map(coordinateRegion: $region, annotationItems: cityAnno) { city in
        MapAnnotation(coordinate: city.coordinate) {
            VStack {
                Text(city.title ?? "")
                Image(systemName: "dot.circle.and.cursorarrow")
            }
            .foregroundColor(.red).scaleEffect(1.2)
            .frame(width: 111, height: 111)
            .onTapGesture {
                print("Clicked")
            }
        }
    }
}