Ist es möglich, die Koordinaten zu erhalten, wo der Text in standardmäßigen (nicht benutzerdefinierten) Cocoa-Steuerelementen gezeichnet wird? Eigentlich benötige ich eine Grundlinie des Textes, den Versatzwert der Y-Achse (relativ zum y-Ursprung des Rahmenrechtecks der Ansicht). Dies zeigt der Interface Builder im Designfenster, wenn Layout-> Layoutrechtecke anzeigen ausgewählt ist.Cocoa steuert die Textposition?
2
A
Antwort
2
Leider gibt es keine einzige Lösung, die für alle Steuerelemente und Zellen funktioniert. Sie sollten eine gute Annäherung dieser Informationen mit diesen Methoden erhalten können:
-[NSCell titleRectForBounds:]
-[NSCell font]
-[NSFont ascender]
Hier ist ein Code, der funktioniert für NSButton/NSButtonCell
NSRect titleRect = [[button cell] titleRectForBounds:[button bounds]];
CGFloat baseline = ceil(NSMinY(titleRect) + [[[button cell] font] ascender]);
An diesem Punkt ist der Basislinie in der Schaltfläche (Grenzen) Koordinatenraum. Möglicherweise möchten Sie es mit [NSView convertPoint: toView:] in einen anderen Speicherbereich konvertieren.
Auch diese "Ceil" in dort ist eine Annäherung. Nicht alle Kontrollen werden das tun. Einige könnten Boden oder andere Rundungsfunktion verwenden. Oder sie können ihren Titel völlig anders gestalten, und diese Approximation wird nicht funktionieren.
Verwandte Themen
- 1. UILabel - wie man die Textposition ändert
- 2. OpenGL Textposition unter Windows
- 3. verstehen CSS Textposition
- 4. Dynamische Textposition auf Bild
- 5. Wasserzeichen Textposition unten rechts
- 6. Textposition in Python Shell
- 7. UITextField gesetzt Cursor Textposition
- 8. wie man die Benutzereingabe steuert
- 9. die asp.net Charting-Styling steuert
- 10. Asp.Net Ajax steuert die Dokumentation?
- 11. Steuert die Neuinitialisierung mit WatiN
- 12. Dateiverwaltung steuert
- 13. Wie berechnen Sie die Textposition eines Elements in einem anderen?
- 14. Anrufformular steuert die Eigenschaften in einer Funktion
- 15. Wie steuert man die searchResultsTableView eines UISearchDisplayControllers?
- 16. AngularJS benutzerdefiniertes Formular steuert die Überprüfung
- 17. Textposition innerhalb <a> Element
- 18. Suchen der Cursor-Textposition in JTextField
- 19. Proc Bericht Textposition oberen und linken Ecke
- 20. Wo sind die Cocoa Keycodes?
- 21. Wie steuert CLOCK Ereignisse?
- 22. ToolStrip Abdeckung steuert
- 23. Three.js, das Schatten steuert
- 24. Nesting Inhalt Benutzer steuert
- 25. Dynamic steuert Speicherverlust
- 26. WinForms steuert Beispielprojekte
- 27. Pandas Plot, wie man die Balkenbreite und die Lücken steuert
- 28. Page.IsPostBack in Benutzer prüfen steuert
- 29. Eingabearten auf der Serverseite steuert
- 30. .Net Usercontrol - Docking 2 steuert
Dies kann ein echter Schmerz sein, um richtig zu werden. In Adobe Lightroom haben wir ein eigenes Layoutsystem für Steuerelemente. Ein Werkzeug, mit dem man überprüfen konnte, wo die Basislinie für den Text gezeichnet wurde, war, mit Hilfe von poseAs einen Debugging-Code hinzuzufügen: und einen globalen Zeichnungscode einzufügen, der die normale Zeichnung überlagert. Im Wesentlichen können wir dies in Debug-Builds aktivieren, um zu zeigen, wo sich die Basislinie auf allen Controls befindet, die uns wichtig sind. Wenn Sie viel davon tun, kann es am Ende sparen Sie Zeit. Ich kann keinen Code aufgrund der proprietären Natur teilen, sorry. –
poseAs: war in Leopard veraltet;) – IlDan