Scrollview 不滚动/尝试将视图添加到内容底部

时间:2021-02-08 21:46:26

标签: swift uiscrollview

所以我以编程方式向我的视图控制器添加了一个滚动视图并添加了一些视图。

func setupScrollView() {
    view.addSubview(scrollView)
    scrollView.addSubview(contentView)
    scrollView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    scrollView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
    scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
    contentView.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor).isActive = true
    contentView.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true
    contentView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
    contentView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
    scrollView.contentSize = contentView.frame.size
}

func addUserAndFollowView(id: String) {
    userAndFollow = UserPfAndFollow(id: id)
    if let userAndFollow = userAndFollow {
        userAndFollow.view.isUserInteractionEnabled = true
        contentView.addSubview(userAndFollow.view)
        self.contentView.bringSubviewToFront(userAndFollow.view)
        userAndFollow.view.translatesAutoresizingMaskIntoConstraints = false
        userAndFollow.view.topAnchor.constraint(equalTo: contentView.topAnchor).isActive = true
        userAndFollow.view.widthAnchor.constraint(equalTo: contentView.widthAnchor).isActive = true
        userAndFollow.view.heightAnchor.constraint(equalToConstant: 100).isActive = true
        
    }
    
}

func setImageViewConstraints() {
    imageView.translatesAutoresizingMaskIntoConstraints = false
    imageView.heightAnchor.constraint(equalToConstant: 300).isActive = true
    imageView.widthAnchor.constraint(equalToConstant: 300).isActive = true
    imageView.centerXAnchor.constraint(equalTo: self.contentView.centerXAnchor).isActive = true
    if let userAndFollow = userAndFollow?.view {
        imageView.topAnchor.constraint(equalTo: userAndFollow.bottomAnchor, constant: 5).isActive = true
    }
}

func addLabelConstraints() {
    self.albumTitle?.translatesAutoresizingMaskIntoConstraints = false
    self.albumDescription?.translatesAutoresizingMaskIntoConstraints = false
    albumTitle?.numberOfLines = 2
    albumDescription?.numberOfLines = 3
    albumDescription?.adjustsFontSizeToFitWidth = false

    albumTitle?.topAnchor.constraint(equalTo: imageView.bottomAnchor, constant: 14).isActive = true    
    albumTitle?.leadingAnchor.constraint(equalTo: self.contentView.leadingAnchor, constant: 10).isActive = true
    albumTitle?.trailingAnchor.constraint(equalTo: self.contentView.trailingAnchor).isActive = true
    albumTitle?.leadingAnchor.constraint(equalTo: self.contentView.leadingAnchor, constant: 10).isActive = true
   
    albumDescription?.lineBreakMode = .byTruncatingTail
    albumDescription?.topAnchor.constraint(equalTo: albumTitle!.bottomAnchor, constant: 9).isActive = true
    albumDescription?.leadingAnchor.constraint(equalTo: self.contentView.leadingAnchor, constant: 10).isActive = true
    albumDescription?.trailingAnchor.constraint(equalTo: self.contentView.trailingAnchor).isActive = true
}

所有这些视图都按照我希望的方式显示,滚动视图不滚动,但是当我在其余视图的底部添加下一个视图(视图控制器中的表视图)时,它没有显示向上。可能是滚动视图不滚动的原因。

func addViewController() {
        if let viewController = viewController {
            contentView.addSubview(viewController.view)
            setVCConstraints()
        }
        
    }
    
    func setVCConstraints() {
        viewController?.view.translatesAutoresizingMaskIntoConstraints = false
        viewController?.view.bottomAnchor.constraint(equalTo: self.contentView.bottomAnchor).isActive = true
        
        viewController?.view.topAnchor.constraint(equalTo: albumDescription!.bottomAnchor, constant: 7).isActive = true
        
        viewController?.view.widthAnchor.constraint(equalTo: self.contentView.widthAnchor).isActive = true
        
    }

我该怎么做才能显示此视图并使我的滚动视图一直向下滚动到此视图控制器及其数组内容,而不是更多或更少?

1 个答案:

答案 0 :(得分:0)

在添加视图之前,您必须

contentView.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor).isActive = true
contentView.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true
contentView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
contentView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
scrollView.contentSize = contentView.frame.size

当然,contentView 的大小与 scrollView 相同,因此不会滚动。大小一样。

添加视图后,您有

viewController?.view.bottomAnchor.constraint(equalTo: self.contentView.bottomAnchor).isActive = true
        
viewController?.view.topAnchor.constraint(equalTo: albumDescription!.bottomAnchor, constant: 7).isActive = true
        
viewController?.view.widthAnchor.constraint(equalTo: self.contentView.widthAnchor).isActive = true

请注意,在上面,您定义了 top bottomwidth -- 没有从左到右的指示 { {1}} 应该从水平路径开始。这可能会导致一些非常奇怪的行为。

但是,您仍然不要将 viewController.view 修改为大于 contentView.contentSize 的大小。

要使某些内容滚动,您需要使 scrollView 大于 contentView.contentSize

相关问题