滚动视图水平移动而不是垂直移动

时间:2020-03-22 16:38:44

标签: swift xcode uiscrollview

我已经创建了滚动视图,并且尝试了许多不同的方法,如下所示,但是在滚动视图水平移动的情况下,我总是得到相同的结果。我希望它垂直移动,但不是。另外,文本视图以一行显示整个消息,而不像我添加滚动视图之前那样使用多行。

import UIKit
import SafariServices


class MainView: UIViewController {

    let transition = MainDropMenuAnimation()

    let scrollView = UIScrollView()
    let scrollViewView = UIView()
    let factView = QuickFact()
    let socialMediaSV = SocialMediaSV()
    let logo = UIImageView()
    let aboutUs = UITextView()
    let dropMenuButton = UIButton(type: .custom)

    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = UIColor(patternImage: #imageLiteral(resourceName: "HomeBackground"))
        addQuickFactView()
        setupScrollView()
        setupNavBar()
    }

    func setupNavBar() {
        navigationItem.title = "Home"
        navigationController?.navigationBar.barTintColor = .clear

        dropMenuButton.setImage(#imageLiteral(resourceName: "dropMenuButton"), for: .normal)
        dropMenuButton.addTarget(self, action: #selector(handleDropMenu), for: .touchUpInside)
        dropMenuButton.heightAnchor.constraint(equalToConstant: 50).isActive = true
        dropMenuButton.widthAnchor.constraint(equalTo: dropMenuButton.heightAnchor).isActive = true
        let leftButton = UIBarButtonItem(customView: dropMenuButton)
        self.navigationItem.leftBarButtonItem = leftButton
    }

    @objc func handleDropMenu() {

        let dropMenu = DropViewContainer()
        dropMenu.modalPresentationStyle = .overCurrentContext
        dropMenu.transitioningDelegate = self
        present(dropMenu, animated: true)
    }

    func addQuickFactView() {

        addChild(factView)
        view.addSubview(factView.view)
        factView.didMove(toParent: self)

        factView.view.translatesAutoresizingMaskIntoConstraints = false
        factView.view.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
        factView.view.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        factView.view.topAnchor.constraint(equalTo: view.topAnchor, constant: 100).isActive = true
        factView.view.heightAnchor.constraint(equalToConstant: 200).isActive = true
    }

    func setupScrollView() {
        setupView()
        scrollView.contentSize.height = 3000
        view.addSubview(scrollView)
        positionScrollView()
    }
    func positionScrollView() {
        scrollView.translatesAutoresizingMaskIntoConstraints = false
        scrollView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
        scrollView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        scrollView.topAnchor.constraint(equalTo: factView.view.bottomAnchor).isActive = true
        scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
    }
    func setupView() {
        setupLogo()
        setupAboutUs()
        setupSocialMediaSV()
        scrollView.addSubview(scrollViewView)
        positionView()
    }
    func positionView() {
        scrollViewView.translatesAutoresizingMaskIntoConstraints = false
        scrollViewView.rightAnchor.constraint(equalTo: scrollView.rightAnchor).isActive = true
        scrollViewView.leftAnchor.constraint(equalTo: scrollView.leftAnchor).isActive = true
        scrollViewView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
        scrollViewView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
    }
    func setupLogo() {
        logo.image = #imageLiteral(resourceName: "Logo")
        scrollViewView.addSubview(logo)
        positionLogo()
    }
    func positionLogo() {
        logo.translatesAutoresizingMaskIntoConstraints = false
        logo.widthAnchor.constraint(equalToConstant: 200).isActive = true
        logo.heightAnchor.constraint(equalToConstant: 200).isActive = true
        logo.centerXAnchor.constraint(equalTo: scrollViewView.centerXAnchor).isActive = true
        logo.topAnchor.constraint(equalTo: scrollViewView.topAnchor, constant: 20).isActive = true
    }

    func setupAboutUs() {
        let aboutUsText = (NSMutableAttributedString(string: "About Us\n", attributes: [NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 25)]))
        aboutUsText.append(NSMutableAttributedString(string: "At Cleaner Together, we are commited to promoting recycling, reusing, and reducing (and of course composting), while spreading sanitization and cleanliness around the world. At the moment, we are just encouraging proper waste disposal, however with proper funding we have many projects we hope to accomplish.", attributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 17), NSAttributedString.Key.foregroundColor: UIColor.black]))

        aboutUs.attributedText = aboutUsText
        aboutUs.textColor = .black
        aboutUs.textAlignment = .left
        aboutUs.isScrollEnabled = false
        aboutUs.isEditable = false
        aboutUs.backgroundColor = .init(white: 1.0, alpha: 0.5)
        aboutUs.layer.cornerRadius = 20
        scrollViewView.addSubview(aboutUs)
        positionAboutUs()
    }
    func positionAboutUs() {
        aboutUs.translatesAutoresizingMaskIntoConstraints = false
        aboutUs.rightAnchor.constraint(equalTo: scrollViewView.rightAnchor, constant: -20).isActive = true
        aboutUs.leftAnchor.constraint(equalTo: scrollViewView.leftAnchor, constant: 20).isActive = true
        aboutUs.heightAnchor.constraint(equalToConstant: 200).isActive = true
        aboutUs.topAnchor.constraint(equalTo: logo.bottomAnchor, constant: 20).isActive = true
    }
    func setupSocialMediaSV() {
        addChild(socialMediaSV)
        scrollViewView.addSubview(socialMediaSV.view)
        socialMediaSV.didMove(toParent: self)

        socialMediaSV.view.translatesAutoresizingMaskIntoConstraints = false
        socialMediaSV.view.centerXAnchor.constraint(equalTo: scrollViewView.centerXAnchor).isActive = true
        socialMediaSV.view.widthAnchor.constraint(equalToConstant: 240).isActive = true
        socialMediaSV.view.topAnchor.constraint(equalTo: aboutUs.bottomAnchor, constant: 20).isActive = true
        socialMediaSV.view.heightAnchor.constraint(equalToConstant: 40).isActive = true
    }
}

extension MainView: UIViewControllerTransitioningDelegate {
    func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        transition.isPresenting = true
        return transition
    }

    func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        transition.isPresenting = false
        return transition
    }
}

1 个答案:

答案 0 :(得分:0)

您应检查约束条件,并确保滚动视图具有正确的 contentSize

使scrollViewView的左右锚点也等于viewController的视图。在func positionView()

相关问题