UIStackView Peek и Pop оверлей глюк
Я пытаюсь реализовать Peek and Pop с содержимым UIStackView
, Проблема в том, что наложение (часть, которая не размыта) при мелкой печати не содержит нужного содержимого. Это в правильном месте, так как это прямо под моим пальцем, но содержимое, кажется, взято из другого места в представлении:
Действия по воспроизведению:
- Откройте пустой проект iOS, используя раскадровки
- Добавить
UIStackView
к представлению контроллера представления - Добавьте ограничения ближайших соседей со всех четырех сторон стека, равные
0
Заменить содержимое
ViewController.swift
со следующим кодом:import UIKit class ViewController: UIViewController { @IBOutlet var stackView: UIStackView! override func viewDidLoad() { super.viewDidLoad() registerForPreviewing(with: self, sourceView: stackView) let loremIpsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sed feugiat ligula. Sed in rutrum lacus, vel auctor felis. Vivamus molestie felis nisi. Mauris euismod eros vitae libero commodo porttitor. Nam posuere, dui vitae aliquam mollis, quam mauris tempus turpis." let label = UILabel() label.numberOfLines = 0 label.text = repeatElement(loremIpsum, count: 4).joined(separator: "\n\n") stackView.addArrangedSubview(label) } } extension ViewController: UIViewControllerPreviewingDelegate { func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? { previewingContext.sourceRect = CGRect(x: location.x - 50, y: location.y - 50, width: 100, height: 100) return storyboard?.instantiateInitialViewController() } func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) { present(viewControllerToCommit, animated: true) } }
Запустите приложение на своем (физическом) устройстве и принудительно коснитесь в любом месте
Я делаю что-то не так, или это ошибка в UIKit?
1 ответ
Решение
Замена
registerForPreviewing(with: self, sourceView: stackView)
от
registerForPreviewing(with: self, sourceView: view)
решил проблему. Я все еще подозреваю, что это ошибка, но по крайней мере это обходной путь.