当内容添加到我的标签时,我在调整大小和使滚动视图可垂直滚动时遇到了一些问题。我的层次结构如下所示:
虽然我的观点是这样的:
因此,当我从 API 调用获取文本时,我想在开始时在代码中填写带有内容的标签。但出于测试目的,我刚刚硬编码了一些 lorem ipsum 文本以使其工作。所以我的内容被添加到标签和 UILabel 调整大小以及包含标签调整大小的视图。我在调整滚动视图内容的大小时遇到问题,以便在标签中的文本较长时可以滚动。这也是我当前的代码:
import UIKit
import PureLayout
class QuestionAndAnswerViewController: UIViewController {
@IBOutlet var menuButton: UIBarButtonItem!
@IBOutlet var questionView: UIView!
@IBOutlet var questionLabel: UILabel!
@IBOutlet var questionContentLabel: UILabel!
@IBOutlet var answerView: UIView!
@IBOutlet var odgovorLabel: UILabel!
@IBOutlet var answerLabel: UILabel!
@IBOutlet var signLabel: UILabel!
@IBOutlet var lineView: UIView!
@IBOutlet var scrollView: UIScrollView!
@IBOutlet var contentView: UIView!
var yPosition: CGFloat = 0.0
var contentSize: CGFloat = 0.0
var attrText = NSMutableAttributedString()
override func viewDidLoad() {
super.viewDidLoad()
scrollView.setNeedsLayout()
scrollView.layoutIfNeeded()
scrollView.translatesAutoresizingMaskIntoConstraints = false
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 5
paragraphStyle.alignment = .justified
let paragraphStyle2 = NSMutableParagraphStyle()
paragraphStyle2.lineSpacing = 5
paragraphStyle2.alignment = .left
if self.revealViewController() != nil {
self.revealViewController().frontViewShadowRadius = 5.0
self.revealViewController().frontViewShadowOpacity = 0.25
menuButton.target = self.revealViewController()
menuButton.action = #selector(SWRevealViewController.rightRevealToggle(_:))
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
}
var text = "To je prvo vprašanje? Kako dolgi je lahko ta tekst da se poravna"
attrText = NSMutableAttributedString(string: text)
attrText.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle2, range: NSMakeRange(0, attrText.length))
questionLabel.attributedText = attrText
text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut quis mi nisi. Etiam nec augue id dui blandit ornare. Nulla auctor, purus vel tincidunt ultricies, enim turpis molestie augue, nec mattis libero ante mattis mauris. Suspendisse posuere, velit posuere viverra feugiat, nulla justo bibendum nisi, nec ultricies lorem enim in nisl. Nunc sit amet quam mollis, faucibus felis eu, posuere dui. Sed vel mattis neque. Fusce elementum at nisl ut volutpat. Nam placerat consequat mi in lacinia. Morbi ut est tristique, efficitur est a, faucibus erat. Suspendisse et ligula ac lacus porttitor pretium ut vehicula felis."
attrText = NSMutableAttributedString(string: text)
attrText.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle, range: NSMakeRange(0, attrText.length))
questionContentLabel.attributedText = attrText
text = "Cras auctor ullamcorper ullamcorper. Vestibulum dignissim quis risus eget congue. Sed et diam libero. Phasellus non lectus sem. Cras auctor ullamcorper ullamcorper. Vestibulum dignissim quis risus eget congue. Sed et diam libero. Phasellus non lectus sem. Cras auctor ullamcorper ullamcorper. Vestibulum dignissim quis risus eget congue. Sed et diam libero. Phasellus non lectus sem. Cras auctor ullamcorper ullamcorper. Vestibulum dignissim quis risus eget congue. Sed et diam libero. Phasellus non lectus sem."
attrText = NSMutableAttributedString(string: text)
attrText.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle, range: NSMakeRange(0, attrText.length))
answerLabel.attributedText = attrText
setupConstraints()
contentView.frame = CGRect(x: contentView.frame.origin.x, y: contentView.frame.origin.y, width: contentView.frame.width, height: 2000)
scrollView.contentSize = CGSize(width: contentView.frame.width, height: 2000)
print(scrollView.contentSize)
}
func setupConstraints() {
//Question Contstraints
questionView.autoPinEdge(.top, to: .top, of: contentView, withOffset: 30)
questionView.autoPinEdge(.left, to: .left, of: contentView, withOffset: 0)
questionView.autoPinEdge(.right, to: .right, of: contentView, withOffset: 0)
questionView.autoPinEdge(.top, to: .top, of: questionLabel, withOffset: -10)
questionLabel.autoPinEdge(.right, to: .right, of: questionView, withOffset: -20)
questionLabel.autoPinEdge(.left, to: .left, of: questionView, withOffset: 20)
lineView.autoPinEdge(.top, to: .bottom, of: questionLabel, withOffset: 20)
lineView.autoPinEdge(.left, to: .left, of: questionView, withOffset: 20)
lineView.autoPinEdge(.right, to: .right, of: questionView, withOffset: -20)
lineView.autoSetDimensions(to: CGSize(width: lineView.frame.width, height: 2))
questionContentLabel.autoPinEdge(.top, to: .bottom, of: lineView, withOffset: 20)
questionContentLabel.autoPinEdge(.right, to: .right, of: questionView, withOffset: -20)
questionContentLabel.autoPinEdge(.left, to: .left, of: questionView, withOffset: 20)
questionView.autoPinEdge(.bottom, to: .bottom, of: questionContentLabel, withOffset: 20)
//Anwser Constraints
answerView.autoPinEdge(.top, to: .bottom, of: questionView, withOffset: 10)
answerView.autoPinEdge(.left, to: .left, of: contentView, withOffset: 0)
answerView.autoPinEdge(.right, to: .right, of: contentView, withOffset: 0)
odgovorLabel.autoPinEdge(.top, to: .top, of: answerView, withOffset: 10)
odgovorLabel.autoPinEdge(.left, to: .left, of: answerView, withOffset: 20)
odgovorLabel.autoPinEdge(.right, to: .right, of: answerView, withOffset: -20)
answerLabel.autoPinEdge(.top, to: .bottom, of: odgovorLabel, withOffset: 20)
answerLabel.autoPinEdge(.left, to: .left, of: answerView, withOffset: 20)
answerLabel.autoPinEdge(.right, to: .right, of: answerView, withOffset: -20)
signLabel.autoPinEdge(.top, to: .bottom, of: answerLabel, withOffset: 20)
signLabel.autoPinEdge(.left, to: .left, of: answerView, withOffset: 20)
signLabel.autoPinEdge(.right, to: .right, of: answerView, withOffset: -20)
contentView.autoPinEdge(.bottom, to: .bottom, of: answerView)
//answerView.autoPinEdge(.bottom, to: .bottom, of: signLabel, withOffset: 20)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func backButtonPressed(_ sender: Any) {
navigationController?.popViewController(animated: true)
}
}
我也在使用 PureLayout,因为这是我能够制作标签并根据文本长度调整视图大小的唯一方法。