Изменить размер всплывающего окна UIImage в ContextMenu?
Допустим, у вас есть контекстное меню для изображения, которое появляется при длительном нажатии. Как сделать всплывающее окно больше, но сохранить его размер?
ViewControllerTableViewCell: UITableViewCell, UIContextMenuInteractionDelegate {
func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { _ in
let share = UIAction(title: "", image: UIImage(systemName: "")) { _ in
// share code
}
return UIMenu(title: "", children: [share])
}
}
override func awakeFromNib() {
super.awakeFromNib()
immy.isUserInteractionEnabled = true
immy.addInteraction(UIContextMenuInteraction(delegate: self))
}
1 ответ
Решение
Вы можете предоставить свой собственный previewProvider в свое контекстное меню. Просто создайте настраиваемый контроллер представления с представлением изображения для предварительного просмотра изображения желаемого размера:
import UIKit
class ImagePreviewController: UIViewController {
private let imageView = UIImageView()
init(image: UIImage) {
super.init(nibName: nil, bundle: nil)
preferredContentSize = image.size
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true
imageView.image = image
view = imageView
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
}
Затем просто добавьте реализацию настраиваемого поставщика предварительного просмотра в UIContextMenuConfiguration
инициализатор:
func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
UIContextMenuConfiguration(identifier: nil) {
ImagePreviewController(image: self.immy.image!)
} actionProvider: { _ in
let share = UIAction(title: "Share", image: UIImage(systemName: "square.and.arrow.up")) { _ in
// share code
}
return UIMenu(title: "Profile Picture Menu", children: [share])
}
}
изменить / обновить:
Без каких-либо действий
func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
UIContextMenuConfiguration(identifier: nil, previewProvider: {
ImagePreviewController(image: self.immy.image!)
})
}