Ошибка наложения UIStackView Peek и Pop

Я пытаюсь реализовать Peek и Pop с содержимым файла UIStackView. Проблема в том, что оверлей (часть, которая не размыта) при неглубоком нажатии не содержит нужного содержимого. Он находится в правильном месте, так как он находится прямо под моим пальцем, но содержимое, кажется, взято из другого места в представлении: example

Действия по воспроизведению:

  1. Откройте пустой проект iOS с помощью раскадровки
  2. Добавьте UIStackView в представление контроллера представления
  3. Добавьте ограничения ближайших соседей со всех четырех сторон представления стека, равные 0
  4. Замените содержимое 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)
        }
    }
    
  5. Запустите приложение на своем (физическом) устройстве и принудительно коснитесь в любом месте.

Я что-то не так делаю, или это ошибка в UIKit?

Изменить: вот как я ожидал, что он будет вести себя: example


person Tim Vermeulen    schedule 28.02.2017    source источник


Ответы (1)


Замена

registerForPreviewing(with: self, sourceView: stackView)

by

registerForPreviewing(with: self, sourceView: view)

решил проблему. Я все еще подозреваю, что это ошибка, но, по крайней мере, это обходной путь.

person Tim Vermeulen    schedule 01.03.2017
comment
Столкнулся с этой ошибкой отдельно на iOS 11.4, но я думаю, что она была исправлена ​​в iOS 12. - person Alex Beals; 04.01.2019