内容がラベルに追加されると、サイズを変更してスクロールビューを垂直方向にスクロールできる問題があります。私の階層は次のようになります。内容に基づいてuiscrollviewのサイズを変更します
私の見解は次のように見えますが:
だから私は、私は、テキストを取得するときに起動時に私のコードでコンテンツとラベルを記入したいと思いますAPI呼び出しから取得します。しかしテスト目的のために、私はそれを動作させるためにいくつかのlorem ipsumテキストをハードコーディングしました。したがって、私のコンテンツはラベルに追加され、UILabelsのサイズが変更され、ラベルを含むビューもサイズ変更されます。スクロールビューのコンテンツのサイズを変更すると問題が発生し、ラベル内のテキストが長い場合はスクロールできます。また、ここでは私の現在のコードは次のとおりです。
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を使用しています。