2015-06-21 99 views
0

Android提供了一個屬性textScaleX,允許在保持字體高度的同時水平縮放文本。我對Android應用程序的使用非常廣泛(特別是對於不像英文的緊湊語言),並希望在ios中找到類似的東西。ios:無柵格水平縮放字體

很明顯,我可以將文本繪製到圖形上下文中並將其作爲圖像進行縮放,但這似乎是一個相當尷尬的解決方案,它將所有文本項目轉換爲ImageView-s。

是否有原生水平縮放文本的方式?例如,可能有一種選擇是基於系統字體創建自定義字體,並更改負責文本寬度的參數。

回答

0

你可以只縮放包含文本的UILabel或UITextView的:

UILabel *label = ... 
label.transform = CGAffineTransformMakeScale(0.8,1); //reduced size in x direction by 20% 

如果這還不夠,你可以看看NSLayoutManger,有可能是一些在那裏。

1

使用UIFontDescriptormatrix屬性。

下面是一個示例,它採用中的UILabel並將其字體水平拉伸1.3倍。

UIFont* baseFont = self.label.font; 
UIFontDescriptor *baseDescriptor = baseFont.fontDescriptor; 
UIFontDescriptor *newDescriptor = [baseDescriptor fontDescriptorWithMatrix: 
    CGAffineTransformMakeScale(1.3, 1.0)]; 
UIFont* newFont = [UIFont fontWithDescriptor:newDescriptor size:0.0]; 
self.label.font = newFont; 
+0

謝謝,尼爾斯和庫爾特。兩個答案都很有用。 Nils的方法更簡單,更接近textScaleX的想法。 Kurt的解決方案允許爲多個視圖創建一種字體。另外(糾正我,如果我錯了),直接應用轉換時,文本在渲染時縮放,而與自定義字體文本繪製預縮放,這使得它看起來更好。我接受Nil的簡單回答和+1給Kurt一個好主意。 – cyanide