【问题标题】:Swift : UIScrollView does not work for UILabelSwift:UIScrollView 不适用于 UILabel
【发布时间】:2021-08-01 21:27:54
【问题描述】:

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

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, constant: 10),
            
            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, constant: 10),
            infoLabel.bottomAnchor.constraint(equalTo: containerView.bottomAnchor)
        ]
        
        NSLayoutConstraint.activate(constraints)
    }
}

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

【问题讨论】:

    标签: swift uiscrollview uikit


    【解决方案1】:

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

    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, constant: 10),
        
        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, constant: 10),
        infoLabel.bottomAnchor.constraint(equalTo: containerView.bottomAnchor)
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多