Перекрывающаяся проблема при добавлении UIViews через код - PullRequest
0 голосов
/ 13 сентября 2018

Я надеюсь, что кто-то может помочь мне с этим:

Я создаю приложение в XCode, и я добавил несколько UIViews через код, я не могу сделать это через main.storyboard, потому что количество UIViews зависит от того, сколько полей в базе данных. Таким образом, если, например, база данных имеет 20 полей, будет 20 UIViews. Это то, что я сделал, и это работает хорошо, но ... вот в чем проблема: UIViews перекрываются с другими объектами, которые были добавлены в Main.storyboard, и некоторые объекты, такие как сегментированный элемент управления, не работают, когда я пытаюсь взаимодействовать с ними.

Это код, который я получил до сих пор:

import UIKit  


class issuesScreen: UIViewController {  
    @IBOutlet weak var csViewLeading: NSLayoutConstraint!  
    var showingMenu=false  
    lazy var scrollView: UIScrollView = {  
        let view = UIScrollView()  
        view.translatesAutoresizingMaskIntoConstraints = false  
        view.contentSize.height = 2000  
        return view  
    }()  

    override func viewDidLoad() {  
        super.viewDidLoad()  
        view.addSubview(scrollView)  
        setupScrollView()  
    }  
    //Here is when I'm adding the views  
    func setupScrollView() {  
        scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true  
        scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true  
        scrollView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true  
        scrollView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true  
        let firstView = UIView()  
        firstView.translatesAutoresizingMaskIntoConstraints = false  
        firstView.backgroundColor = .black  

        scrollView.addSubview(firstView)  

        firstView.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor).isActive = true  
        firstView.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: 40).isActive = true  
        firstView.widthAnchor.constraint(equalToConstant: 400).isActive = true  
        firstView.heightAnchor.constraint(equalToConstant: 180).isActive = true  

        let secondView = UIView()  
        secondView.translatesAutoresizingMaskIntoConstraints = false  
        secondView.backgroundColor = .white  
        scrollView.addSubview(secondView)  

        secondView.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor).isActive = true  
        secondView.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: 41).isActive = true  
        secondView.widthAnchor.constraint(equalToConstant: 398).isActive = true  
        secondView.heightAnchor.constraint(equalToConstant: 178).isActive = true  
    }  
    @IBAction func showBar(_ sender: UIBarButtonItem) {  
        if(showingMenu) {  
            csViewLeading.constant = -240  
        } else {  
            csViewLeading.constant = 0  
            UIView.animate(withDuration: 0.3, animations: {self.view.layoutIfNeeded()})  
        }  
        showingMenu= !showingMenu  
    }  
}

Это результат тестирования приложения:

https://i.imgur.com/n24HDvH.png,

серый фон является боковой панелью, и, как вы можете видеть, он перекрывается с UIView.

Я действительно не знаю причину, по которой это происходит, а также, не говорите мне вместо этого использовать tableView, если нет возможности получить этот пользовательский стиль (вот как он должен выглядеть): https://i.imgur.com/4nU97yO.png

1 Ответ

0 голосов
/ 13 сентября 2018

Определенно используйте UITableView. Конечно, можно создать индивидуальный дизайн - просто внедрите пользовательский UITableViewCell, который вы можете проектировать так, как хотите.

Даже если ваше решение заработает, производительность будет ужасной, если у вас много записей в базе данных. UITableView выполняет большую часть оптимизации, например повторное использование ячеек, которые не видны.

...