2017-12-17 17 views
0

나는 scrollview 안에 동적 텍스트를 포함하는 텍스트 레이블을 가지고 있습니다. 몇 줄의 텍스트가 레이블의 맨 아래에서 잘립니다. Storyboard에서 자동 레이아웃을 사용하여 모든 것을 설정했습니다.TextLabel ScrollView에서 잘라 내기

다른 게시물 당 UIScrollView의 ViewDidLoad에서 isScrollingEnabled를 사용하지 않으려 고 시도했습니다.

나는 또한

나는 내가 HTML에서 글꼴을 변경하기 위해 사용하고 확장에 제거의 과정으로 문제를 좁혀 한 텍스트 레이블 및 패딩에 바닥 제약 조건을 제거하려고했습니다 html로 지정된 문자열로 작업하고 있습니다. 이 떨어져 때로는 몇 라인, 내용의 때때로 대부분의 텍스트를 절단 왜 내가 알아낼 수 없습니다, 때로는 모든 콘텐츠가없는

extension NSAttributedString { 

    func changeHTMLFont(_ text: NSAttributedString) -> NSAttributedString { 
    let newAttributedString = NSMutableAttributedString(attributedString: (text)) 
    newAttributedString.enumerateAttribute(NSAttributedStringKey.font, in: NSMakeRange(0, newAttributedString.length), options: []) { value, range, stop in 
    guard let currentFont = value as? UIFont else { 
    return 
    } 
    //USE FOR FACE OPTIONS 
    let fontDescriptor = currentFont.fontDescriptor.addingAttributes([UIFontDescriptor.AttributeName.family: "Optima", UIFontDescriptor.AttributeName.face: "Bold"]) 
    //let fontDescriptor = currentFont.fontDescriptor.addingAttributes([UIFontDescriptorFamilyAttribute: "Optima"]) 
    if let newFontDescriptor = fontDescriptor.matchingFontDescriptors(withMandatoryKeys: [UIFontDescriptor.AttributeName.family]).first { 
    let newFont = UIFont(descriptor: newFontDescriptor, size: 32.0) //use size: currentFont.pointSize for default font size 
    newAttributedString.addAttributes([NSAttributedStringKey.font: newFont], range: range) 
    } 
    } 
    return newAttributedString 
    } 

} 

스토리 보드 계층 :

Storyboard Hierarchy

UITextLabel 제약 (수퍼가있는 UIScrollView 인)

Text Label Constraints

업데이트] 이미지 : 화면의

보기 스크롤하기 전에 : 라벨의 화면

enter image description here

보기에 도달 하단 :

enter image description here

답변

1

있는 ScrollView가 있어야합니다 최종 콘텐츠 크기. 이를 수행하려면 하위 뷰의 너비/높이가 적어도 하나 이상이어야합니다.

UILabel 너비를 화면 너비 (원하는 여백 빼기)로 설정할 수 있습니다. 그리고 950에있는 기본값으로 높이 설정 높이 제약 조건의 우선 순위를 설정 그런 다음 1000

enter image description here

enter image description here

+0

대단히 감사합니다. 누락 된 구속 조건 (높이)을 설정하고 뷰가 스크롤되지 않으면 포옹과 압축 우선 순위를 설정하지 않았다는 것을 알게되었습니다. 일단 내가 그랬 으면, 뷰는 스크롤되었지만 텍스트는 여전히 잘려져있다. – froggomad

+0

나는 같은 페이지에 있는지 뷰의 이미지를 추가했다. 나는 생각한다. 우리는 – froggomad

+0

프로젝트를 추가 할 수 있습니까? – Demosthese

1

에 UILabel의의 수직 콘텐츠 포옹 및 압축 우선 순위를 설정 나는 그래서 스토리 보드를 사용한 적이 확인할 상자를 말할 수는 없지만 autolayout을 올바르게 사용한다면 스크롤 뷰에서 높이를 명시 적으로 설정할 필요가 없습니다 (높이가 필요한 뷰가있는 경우 제외). 콘텐츠 크기가 아닌 동적 레이블, 아무것도.

UILabel (또는 스크롤보기의 맨 아래보기)이 스크롤보기의 맨 아래에 고정되어 있다면 괜찮습니다. 당신은 또한 제대로 스크롤 뷰의 상단에 최상위보기를 정박 한 경우

someLabel.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true 

은, 자동 레이아웃은 당신을위한 콘텐츠 크기를 처리합니다 (이 이상의 규칙이있다 그러나 이것은 일반적인 전제). 레이블에 관해서는 autolayout 크기를 사용하십시오.

someLabel.text = someLongString 
someLabel.numberOfLines = 0 
someLabel.translatesAutoresizingMaskIntoConstraints = false 
scrollView.addSubview(someLabel) 
someLabel.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor, constant: 16).isActive = true 
someLabel.topAnchor.constraint(equalTo: someView.bottomAnchor, constant: 32).isActive = true 
someLabel.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -32).isActive = true 
someLabel.sizeToFit() 

이보다 더 많은 작업을 수행 할 필요가 없습니다.

+0

대단히 고마워요. 텍스트 레이블은 scrollview의 맨 아래에 고정되어 있습니다. 웃음 소리와 낄낄 거림에 대해서는 코드로 설정하려고 시도했지만 결과는 동일합니다. ( 레이블의 맨 아래까지 콘텐츠 크기가 올바르게 처리되고 있습니다. 결과 하나가 300 줄을 초과하고 2 줄만 잘립니다. 다른 하나는 120과 1 라인이 끊어졌습니다. 매우 이상한 행동입니다. – froggomad

+0

나는 우리가 같은 페이지에 있는지 확인하기 위해 뷰의 이미지를 추가했습니다 ... 나는 우리가 생각합니다. – froggomad