gpt4 book ai didi

ios - 快速更改 UImenu 的位置

转载 作者:行者123 更新时间:2023-12-04 11:39:32 24 4
gpt4 key购买 nike

我想在我的应用程序中添加一个 UIMenu,我正在练习它,现在有一个问题是否可以设置 UIMenu 的位置比当前显示的按钮高一点:
Menu above button
正如您在这张照片中看到的那样,菜单当前覆盖了标签栏,我想将它设置为比标签栏高一点。
这是我的代码:

let menu = UIMenu(title: "", children: [
UIAction(title: NSLocalizedString("Gallery", comment: ""), image: UIImage(systemName: "folder"), handler: {
(_) in
self.loadPhotoGallery()
})
])

btnMenuExtras.menu = menu

最佳答案

iOS 14+
辛西 iOS 14 UIControl具有提供附加菜单的点的方法

/// Return a point in this control's coordinate space to which to attach the given configuration's menu.
@available(iOS 14.0, *)
open func menuAttachmentPoint(for configuration: UIContextMenuConfiguration) -> CGPoint
所以你可以覆盖 UIButton为相对于按钮本身的菜单(计算或硬编码)提供所需的位置(`因为它在按钮的坐标空间中)并在 Storyboard 中使用该按钮(作为控制类)或以编程方式创建(如果您需要注入(inject)它在某处):
class MyButton: UIButton {
var offset = CGPoint.zero
override func menuAttachmentPoint(for configuration: UIContextMenuConfiguration) -> CGPoint {
// hardcoded variant
// return CGPoint(x: 0, y: -50)

// or relative to orginal
let original = super.menuAttachmentPoint(for: configuration)
return CGPoint(x: original.x + offset.x, y: original.y + offset.y)
}
}

class ViewController: UIViewController {

@IBOutlet weak var btnMenuExtras: MyButton! // << from storyboard

override func viewDidLoad() {
super.viewDidLoad()

let menu = UIMenu(title: "", children: [
UIAction(title: NSLocalizedString("Gallery", comment: ""), image: UIImage(systemName: "folder"), handler: {
(_) in
// self.loadPhotoGallery()
})
])

// offset is hardcoded for demo simplicity
btnMenuExtras.offset = CGPoint(x: 0, y: -50) // << here !!
btnMenuExtras.menu = menu
}
}
demo
结果:
demo1
使用 Xcode 13/iOS 15 准备和测试的演示
backup

关于ios - 快速更改 UImenu 的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67809341/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com