2017-03-25 5 views
0

Ich versuche, Text anzuzeigen, der manchmal einen mathematischen Ausdruck enthalten kann, also verwende ich MTMathUILabel von iosMath. Ich erzeuge die Labels dynamisch und füge sie einem Stack hinzu, wenn ich die Strings aus der db ziehe. Das Problem ist, dass der gesamte Text, der nicht mathematisch ist, ohne Leerzeichen angezeigt wird. dh: In db: Löse die folgende Gleichung: (Mathematik hier) In-Label: Solvethefollowingequation: (math hier)Swift 3: iosMath-Etikett entfernt alle Leerzeichen

Hier ist, was ich bisher versucht:

for question in all_questions { 
    let finalString = question.question?.replacingOccurrences(of: " ", with: "\\space", options: .literal, range: nil) 

    let label = MTMathUILabel() 
    label.textColor = UIColor.black 
    label.latex = finalString 
    stack.addArrangedSubview(label) 
} 

Aber das Problem ist, dass es platziert buchstäblich zwei. Und xcode lässt mich nicht nur eins schreiben, weil es nicht maskiert ist. Aber wenn ich nur schreibe

print("\\space") 

Dann wird es nur eine drucken.

Wie kann ich das beheben, also füge ich nur einen hinzu? Wenn dies nicht möglich ist, wie kann ich erreichen, was ich will? Gibt es eine bessere Bibliothek da draußen?

+0

Ist der doppelte Backslash in der Zeichenfolge nach dem Ersetzen von Leerzeichen? oder in der finalString-Variable (die du nicht angegeben hast, wie es dazu kam)? oder im angezeigten Etikett? Wenn Ihr Fragenstring in LaTeX korrekt formatiert ist und nicht nur ein einfacher Text, sollten Sie keine Leerzeichen vermeiden müssen. Bitte geben Sie genauer an, wo das Problem auftritt. –

+0

Mein bad, string und finalString sollen die gleiche Variable sein. Nicht sicher, was du fragst. Die Zeichenfolge ist richtig formatiert, ich bekomme sie von einem JSON-Objekt und versuche dann, sie im Label anzuzeigen, aber der Text erscheint ohne Leerzeichen, obwohl ich bei einem einfachen Ausdruck Leerzeichen in @AlainT habe. – Filipe

Antwort

0

Nachdem ich einen kurzen Blick auf die doc- und LaTeX-Konventionen von MTMathUILabel geworfen habe, sollten Sie Ihre Leerzeichen durch ein Tildezeichen "~" ersetzen. Dadurch werden sie zu nicht brechenden Leerzeichen und vermeiden das Backslash-Problem (was wahrscheinlich daran liegt, dass MTMathUILabel nicht von \ space verstanden wird).

Systematischer Ersatz aller Leerzeichen kann zu unerwünschten Ergebnissen führen, wenn die Formel selbst legitime Leerzeichen enthält.

Zum Beispiel würde eine quadratische Gleichung ausgedrückt als:

x = \ frac {-b \ pm \ sqrt {b^2-4ac}} {} 2a

Sie wird am Ende Ersetzen Räume in geschweiften Klammern, und das, was Sie wollen oder auch nicht:

x ~ = ~ \ frac {-b ~ \ pm ~ \ sqrt {b^2-4ac}} {} 2a

+0

Ich werde es versuchen und lassen Sie wissen, ob es funktioniert oder nicht – Filipe

+0

Leider funktioniert das auch nicht: /. Normaler Text im MTMathUILabel wird immer noch ohne Leerzeichen angezeigt. – Filipe

+0

@Filipe hast du schon eine lösung bekommen? – Nitesh