2017-12-17 6 views
0

Ich habe eine Textbeschriftung mit dynamischen Text innerhalb einer Scrollview. Ein paar Zeilen Text werden von der Unterseite des Etiketts abgeschnitten. Ich habe alles im Storyboard mithilfe des automatischen Layouts eingerichtet.TextLabel Abgeschnitten in ScrollView

Ich habe versucht, IsScrollingEnabled in ViewDidLoad auf der UIScrollView per einem anderen Beitrag umsonst geschaltet.

Ich habe auch versucht die untere Einschränkung für die Beschriftung und Polsterung durch Prozess der Beseitigung zu einer Verlängerung

Ich habe verengt das Problem zu entfernen Ich bin mit der Schrift im HTML ändern da ich mit einer HTML-attributierten Zeichenfolge arbeite. Ich kann nicht herausfinden, warum dies aus dem Text ist schneiden, manchmal nur ein paar Zeilen, manchmal die Mehrheit des Inhalts, und manchmal alle Inhalte

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 Hierarchie fehlt:

Storyboard Hierarchy

UITextLabel Constraints (Superview die UIScrollView ist):

Text Label Constraints

AKTUALISIERT BILDER:

Blick auf Bildschirm vor Scrollen:

enter image description here

Blick auf Bildschirm bei Erreichen unten Label:

enter image description here

Antwort

1

Ein Scroll braucht ein haben Definitive Inhaltsgröße. Um dies zu tun, sollten seine Unteransichten Breite/Höhe haben (mindestens eine davon).

Sie können die Breite Ihrer UILabel auf eine Bildschirmbreite einstellen (abzüglich des von Ihnen gewünschten Rands). Und legen Sie seine Höhe auf jeden Standardwert gesetzt Höhe Constraint Priorität 950. Stellen Sie dann UILabel die vertikale Inhalt umarmt und Kompression Priorität 1000.

enter image description here

enter image description here

+0

Vielen Dank dafür. Ich setzte die fehlende Einschränkung (Höhe) und die Ansicht scrollte nicht, dann erkannte ich, dass ich die Umarmungs- und Komprimierungsprioritäten nicht eingestellt hatte. Sobald ich das getan habe, scrollte die Ansicht, aber der Text ist immer noch abgeschnitten – froggomad

+0

Ich habe Bilder der Ansichten hinzugefügt, um sicherzustellen, dass wir auf der gleichen Seite sind ... Ich denke, wir sind – froggomad

+0

Können Sie das Projekt anhängen? – Demosthese

1

Ich habe noch nie verwendet, so dass ich Storyboard Ich konnte Ihnen nicht sagen, welche Boxen Sie überprüfen sollten, aber Sie müssen keine Höhe explizit in einer Bildlaufansicht festlegen, wenn Sie das automatische Layout korrekt verwenden (außer natürlich, wenn Sie Ansichten haben, die Höhen benötigen) - nicht die Inhaltsgröße dynamische Etiketten, nichts.

Solange die UILabel (oder was auch immer die unterste Ansicht in der Bildlaufansicht ist) am unteren Rand der Bildlaufansicht verankert ist, ist alles in Ordnung.

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

Wenn Sie auch den meist Top-Blick auf den oberen Rand der Bildlaufansicht verankert richtig haben, automatisches Layout wird die Inhalt Größe für Sie behandeln (es gibt mehr Regeln, aber dies ist die allgemeine Prämisse). Wie für das Label, lassen Sie die Größe automatisch für Sie auch.

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() 

Sie müssen nichts mehr als das tun.

+0

Vielen Dank. Das ist es nur, das Textlabel ist am unteren Rand der Scrollview verankert. Für grins und kichern habe ich versucht, es in Code zu setzen, aber die Ergebnisse sind die gleichen :( Content-Größe wird bis zum Ende des Etiketts richtig behandelt. Ein Ergebnis hat> 300 Zeilen Text, und nur 2 sind abgeschnitten Eine andere hat 120 und 1 Zeile ist abgeschnitten Es ist sehr seltsames Verhalten – froggomad

+0

Ich habe Bilder der Ansichten hinzugefügt, um sicherzustellen, dass wir auf der gleichen Seite sind ... Ich denke, wir sind – froggomad

Verwandte Themen