前面的問題:我們可以直接設置NSFont的字體重量或字體樣式,而不是更改字體名稱嗎?
我們能不能直接訪問字體重量和字體樣式信息的屬性串?或者我們可以創建一個新的字符串,我們可以設置這些信息?
的解釋:
在iOS 6中,您可以切換選擇粗體或斜體。但是它的工作方式令人煩惱:它不會更改Apple向我們提供的NSFontAttributeName(將字體名稱從「HelveticaNeue」更改爲「HelveticaNeue-Bold」)。相反,它將字體家族保留爲「Helvetica Neue」,並將字體重量更改爲樣式字符串中的粗體。如果你要問其描述屬性文本的情況下,你會看到這樣的事情對於其字體信息:
NSFont = "<UICFFont: 0x1fbc53a0> font-family: \"Helvetica Neue\"; font-weight: bold; font-style: normal; font-size: 16px";
這就產生了一個問題。我們不能在保留粗體和斜體樣式信息的同時更改字體。如果您跳過掃描樣式信息的舊屬性字符串的循環,使用新字體創建一個新字符串,然後更改字體屬性名稱(例如,使用「Courier-Bold」粗體),則會產生一個新問題:如果您嘗試將字體切換回正常(而不是粗體),您將改爲使用「粗體」字體的「Courier-Bold」和的字體名稱,因爲樣式信息尚未設置爲粗體。當然,切換不會改變字體名稱。所以你基本上創建了一個字體,當用戶切換選定的文本時,字體不能再被改變。用戶將按下上下文菜單中的「粗體」按鈕,但它不會執行任何操作,因爲現在粗體已被硬編碼爲字體名稱。
如果轉到其他路徑並嘗試在UITextView中覆蓋「toggleBoldface」和「toggleItalic」,似乎無法實際防止樣式字符串中的樣式信息發生更改。看起來,您無法在切換事件期間單獨更改字體名稱。
所以,問題再次出現:我們是否可以直接以某種方式訪問字體重量和字體樣式信息?或者我們可以創建一個新的字符串,我們可以設置這些信息?這將解決嘗試從一種字體切換到另一種字體並保留樣式信息的問題。
和雙澄清:
我們正在談論的iOS。當您爲某些字符範圍設置屬性字符串的字體屬性(NSFontAttributeName)時,內部iOS將使用樣式字符串創建NSFont。如果您自己設置了字體屬性,則樣式字符串將顯示爲「font-weight:normal; font-style:normal」。但是這個樣式字符串是存儲UITextView(通過切換)設置的粗體和斜體信息的位置。
你需要在你的問題做一些修改至少一次:NSFont是適用於MacOS,而*** *** UIFont是針對iOS;你使用哪種體系結構和/或使用哪種字體類? –
恐怕這不正確。你創建一個NSFontAttributeName作爲屬性字符串的屬性(通過指定一個UIFont),並且在iOS內部把它變成一個NSFont。因此,如果您使用NSLog爲其描述請求一段屬性文本,那麼我將包含的代碼稱爲「NSFont」。 –
更具體地說,如果您要求NSAttributedString描述它,NSFont信息就是您要閱讀的內容的一部分。 –