UIView не отображается в UIScrollView программно - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть контейнер UIView внутри UIScrollView. но это не отображается в scrollview. когда я проверяю в иерархии представления отладки ширина неоднозначна. здесь я показываю пи c и мою настройку кода.

uiview

        view.addSubview(scrollView)
        scrollView.contentSize.height   = 1000
        scrollView.backgroundColor      = #colorLiteral(red: 0.968627451, green: 0.968627451, blue: 0.968627451, alpha: 1)
        scrollView.anchor(top: view.topAnchor, trailing: view.trailingAnchor, bottom: view.bottomAnchor, leading: view.leadingAnchor, topPadding: 0, rightPadding: 0, bottomPadding: 0, leftPadding: 0, width: 0, height: 0)

        scrollView.addSubview(navigationView)
        navigationView.addSubview(titleLbl)
        navigationView.addSubview(profileIV)

        navigationView.backgroundColor  = .red

        navigationView.anchor(top: scrollView.topAnchor, trailing: scrollView.trailingAnchor, bottom: nil, leading: scrollView.leadingAnchor, topPadding: 0, rightPadding: 0, bottomPadding: 0, leftPadding: 0, width: 0, height: 200)

        titleLbl.anchor(top: navigationView.topAnchor, trailing: nil, bottom: nil, leading: navigationView.leadingAnchor, topPadding: 40, rightPadding: 0, bottomPadding: 0, leftPadding: 16, width: 50, height: 23)

        profileIV.anchor(top: navigationView.topAnchor, trailing: nil, bottom: nil, leading: nil, topPadding: 80, rightPadding: 0, bottomPadding: 0, leftPadding: 0, width: 68, height: 68)
        profileIV.centerXAnchor.constraint(equalTo: navigationView.centerXAnchor).isActive = true

        profileNameLbl.anchor(top: profileIV.bottomAnchor, trailing: nil, bottom: nil, leading: nil, topPadding: 10, rightPadding: 0, bottomPadding: 0, leftPadding: 0, width: 0, height: 27)
        profileNameLbl.centerXAnchor.constraint(equalTo: navigationView.centerXAnchor).isActive = true


Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Вы должны изменить свой код на:

// ваше представление прокрутки

enter image description here

// ваше представление навигации

enter image description here

enter image description here

И добавить к yourViewController : UIViewController, UIScrollViewDelegate

При viewDidLoad :

yourScrollView.contentSize = CGSize(width: yourNavigationView.frame.width, height: yourNavigationView.frame.height)
    scroll.delegate = self

После этого делайте все, что вы хотите внутри вашего навигационного окна.

Кроме того, вы можете добавить этот код, если необходимо:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView == scroll{
        if scrollView.contentOffset.x != 0 {
            scrollView.contentOffset.x = 0
        }
    }
}

Надеюсь, это поможет ...

0 голосов
/ 28 февраля 2020

Проходя программированием c способом. хорошо, вот попробуйте использовать это

open class BaseScrollViewController: UIViewController {

    lazy var contentViewSize = CGSize(width: self.view.frame.width, height: self.view.frame.height + 100)

    lazy var scrollView: UIScrollView = {
        let view = UIScrollView(frame: .zero)
        view.backgroundColor = .white
        view.frame = self.view.bounds
        view.contentSize = contentViewSize
        return view
    }()

    lazy var containerView: UIView = {
        let v = UIView()
        v.backgroundColor = .clear
        v.frame.size = contentViewSize
        return v
    }()

    override open func viewDidLoad() {
        super.viewDidLoad()
        view.addSubviews(scrollView)
        view.backgroundColor = .white
        scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true

        scrollView.addSubview(containerView)
        setupContainer(containerView)
    }

    public func setupContainer(_ container: UIView) {

    }
}

использование:

class ClientScrollViewController: BaseScrollViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func setupContainer(_ container: UIView) {
        //add your views here
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...