내보기 중 하나에서 scrollview 하위보기를 추가했지만 UILabel의 텍스트 인 scrollview의 내용에 정확히 맞게 높이를 얻는 데 문제가 있습니다. 텍스트 길이가 여러 개인 경우이보기를 인스턴스화 할 때 높이가 동적이어야합니다 (예 : 텍스트 길이의 요소). 내가 로그 할 때마다 label.frame.bounds
(0,0)이 나옵니다. 나는 또한 운이 좋지 않은 몇 군데에서 sizeToFits()
을 시도했다.UILabel에서 알 수없는 양의 텍스트에 맞게 UIScrollView의 크기를 조정하는 방법은 무엇입니까?
제 목표는 스크롤 막대가 텍스트의 마지막 줄에 도달하면 끝내도록하는 것입니다. 또한 프로그래밍 방식 제약 만 사용하고 있습니다.
import UIKit
class ViewController: UIViewController, UIScrollViewDelegate {
let scrollView = UIScrollView()
let containerView = UIView()
let label = UILabel()
override func viewDidLoad() {
super.viewDidLoad()
scrollView.delegate = self
// This needs to change
scrollView.contentSize = CGSize(width: 375, height: 1000)
scrollView.addSubview(containerView)
view.addSubview(scrollView)
label.text = unknownAmountOfText()
label.backgroundColor = .gray
containerView.isUserInteractionEnabled = true
containerView.addSubview(label)
label.translatesAutoresizingMaskIntoConstraints = false
label.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true
label.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
scrollView.frame = view.bounds
containerView.frame = CGRect(x: 0, y: 0, width: scrollView.contentSize.width, height: scrollView.contentSize.height)
}
}
어떤 도움에 감사드립니다 :
내 코드의 압축 된 버전은 다음과 같다. 발견
해결책 :
func heightForLabel(text: String, font: UIFont, lineHeight: CGFloat, width: CGFloat) -> CGFloat {
let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: width, height: CGFloat.greatestFiniteMagnitude))
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.byWordWrapping
label.font = font
label.text = text
label.setLineHeight(lineHeight: lineHeight)
label.sizeToFit()
return label.frame.height
}
은 내가 레이블의 높이에 따라있는 ScrollView 높이에 해당하는 내용의 크기를 설정하는 데 필요한 걸 제공하는 온라인이 솔루션을 발견했다. 이상적으로, 나는이 기능없이 이것을 결정할 수있을 것이지만, 지금은 만족한다.
왜 당신이 인터페이스 빌더보다 프로그래밍 오히려이 일을하고 있습니다 :
그래서 ... 여기 당신이 뭘 하려는지의 예입니다? 이것을 처리하는 가장 쉬운 방법은 레이아웃 제약 조건을 사용하는 것입니다.하지만 코드에서 매우 빨리 추악해질 수 있습니다. –
왜 UILabel을 UIScrollView에 넣은 다음 레이블에 맞게 스크롤보기의 크기를 조정하려고합니까? 스크롤링 하시겠습니까? 그렇다면 스크롤보기의 크기를 조정하는 이유는 무엇입니까? 스크롤을 원하지 않는다면, 왜 스크롤 뷰에 레이블을 넣으시겠습니까? – DonMag
프로그래밍 방식 레이아웃으로 만 프로젝트를 시도하고 싶었습니다. 내 다음 프로젝트에서는 인터페이스 빌더를 사용할 것이라고 생각합니다. 그러나 지금은 전환하기에 너무 깊이 생각하고 있습니다. 그래서 이것을 프로그램 적으로 파악해야합니다. –