Swift:UIScrollView 不适用于 UILabel

我想在 UILabel 中放置一个带有很长文本的 UIScrollView 以滚动其内容。为此,我有以下代码:

import UIKit

class InfoViewController: UIViewController {
    private let info : String =
        """
           A VERY LONG TEXT HERE
        """
    
    private let scrollView : UIScrollView = {
        let view = UIScrollView()
        view.translatesAutoresizingMaskintoConstraints = false
        view.keyboardDismissMode = .onDrag
        view.isScrollEnabled = true
        return view
    }()

    private let containerView : UIView = {
        let view = UIView()
        view.translatesAutoresizingMaskintoConstraints = false
        return view
    }()

    private let infoTitleLabel : UILabel = {
        let view = UILabel()
        view.translatesAutoresizingMaskintoConstraints = false
        view.text = "Title"
        view.font = UIFont.systemFont(ofSize: 18,weight: .bold)
        return view
    }()

    private lazy var infoLabel : UILabel = {
        let view = UILabel()
        view.translatesAutoresizingMaskintoConstraints = false
        view.numberOfLines = 0
        view.text = self.info
        return view
    }()
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        safeArea = view.layoutMarginsGuide
        
        setupView()
    }
    
    private var safeArea : UILayoutGuide!

    private func setupView()
    {
        view.backgroundColor = .white
        title = "Info"
        
        view.addSubview(scrollView)
        
        containerView.addSubview(infoTitleLabel)
        containerView.addSubview(infoLabel)
        
        scrollView.addSubview(containerView)
        
        let constraints = [
            scrollView.topAnchor.constraint(equalTo: safeArea.topAnchor),scrollView.bottomAnchor.constraint(equalTo: safeArea.bottomAnchor),scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor),scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor),containerView.topAnchor.constraint(equalTo: scrollView.topAnchor),containerView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),containerView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),containerView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor),containerView.widthAnchor.constraint(equalTo: scrollView.widthAnchor),containerView.heightAnchor.constraint(equalTo: scrollView.heightAnchor),infoTitleLabel.topAnchor.constraint(equalTo: safeArea.topAnchor,constant: 10),infoTitleLabel.leadingAnchor.constraint(equalTo: containerView.leadingAnchor,infoTitleLabel.heightAnchor.constraint(equalToConstant: 20),infoLabel.leadingAnchor.constraint(equalTo: infoTitleLabel.leadingAnchor),infoLabel.trailingAnchor.constraint(equalTo: containerView.trailingAnchor,constant: -10),infoLabel.topAnchor.constraint(equalTo: infoTitleLabel.bottomAnchor,infoLabel.bottomAnchor.constraint(equalTo: containerView.bottomAnchor)
        ]
        
        NSLayoutConstraint.activate(constraints)
    }
}

但我没有看到滚动发生。这是什么原因?是否与动态标签内容大小有关?

dtzel 回答:Swift:UIScrollView 不适用于 UILabel

该问题与不正确的约束有关。这是正确的代码:

let constraints = [
    scrollView.topAnchor.constraint(equalTo: safeArea.topAnchor),scrollView.bottomAnchor.constraint(equalTo: safeArea.bottomAnchor),scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor),scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor),containerView.topAnchor.constraint(equalTo: scrollView.topAnchor),containerView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),containerView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),containerView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor),containerView.widthAnchor.constraint(equalTo: scrollView.widthAnchor),infoTitleLabel.topAnchor.constraint(equalTo: containerView.topAnchor,constant: 10),infoTitleLabel.leadingAnchor.constraint(equalTo: containerView.leadingAnchor,infoTitleLabel.heightAnchor.constraint(equalToConstant: 20),infoLabel.leadingAnchor.constraint(equalTo: infoTitleLabel.leadingAnchor),infoLabel.trailingAnchor.constraint(equalTo: containerView.trailingAnchor,constant: -10),infoLabel.topAnchor.constraint(equalTo: infoTitleLabel.bottomAnchor,infoLabel.bottomAnchor.constraint(equalTo: containerView.bottomAnchor)
]
本文链接:https://www.f2er.com/464.html

大家都在问