2014-01-21 27 views
48

我的應用程序使用一個UITextView輸入敘利亞文本(Estrangelo字體),但UITextView的錯誤使一些信件是這樣的:的UITextView呈現自定義字體錯誤地適用於iOS 7

enter image description here

我有一個UILabel測試它和一個UITextView。 UILabel正確顯示它,但UITextView不正確地顯示頂部點並將它們移動到底部(參見上面的結果)。

此問題只發生在iOS 7中,不會發生在iOS 6中。請告訴我是否有任何方法可以解決問題。

這是my test code

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 40)]; 
label.center = CGPointMake(self.view.center.x, self.view.center.y-40); 
label.font = [UIFont fontWithName:@"East Syriac Adiabene" size:24]; 
label.text = @"ܩ̈ ܡ̄ ܬ̇ ܒ̃"; 
[self.view addSubview:label]; 

UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, 100, 40)]; 
textView.center = CGPointMake(self.view.center.x, self.view.center.y+40); 
textView.font = [UIFont fontWithName:@"East Syriac Adiabene" size:24]; 
textView.text = @"ܩ̈ ܡ̄ ܬ̇ ܒ̃"; 
[self.view addSubview:textView]; 
+5

了投票,所以你得到一些你的慷慨的背部和讓人驚訝,高興,問題是不是我的! –

+3

我可以肯定地說,蘋果在他們的字體系統方面有問題,尤其是他們的像素測量和位置。在對MacOS和iOS上的個人工作進行了大量研究之後,我在蘋果網站上看到了他們已經知道他們有這些問題的帖子。我認爲他們正在研究它,但這是一個很可能無法在單個版本中修復的架構問題,但需要多個版本才能解決所有問題。 – trumpetlicks

+1

你有沒有試過7.1測試版?不知道它是否實際上是固定的,只是想知道。 – Kevin

回答

6

我調試這個問題一點,這似乎是一個錯誤的方式NSLayoutManager佈局的文本。正如其他答案指出的那樣,UITextView是自iOS7開始圍繞TextKit構建的,因此內部使用NSLayoutManager來佈局文本。 UILabel使用核心文本直接佈局文本。兩者最終都使用Core Text來呈現字形。

您應該用Apple打開一個錯誤報告併發布該號碼以便人們可以複製它。這個問題到目前爲止還沒有在iOS7.1 beta版中解決。

作爲一種解決方法,您可以將UITextView替換爲其他Core Text替代編輯器,這些替代編輯器直接用Core Text進行佈局和渲染,但問題不存在。

我測試了SECoreTextView,它正確地顯示了文字。它實現了一個類似UITextView的API,但內部使用Core Text。

下面是它的外觀與SECoreTextView交換UITextView後:

SETextView *textView = [[SETextView alloc] initWithFrame:CGRectMake(0, 0, 100, 40)]; 
textView.center = CGPointMake(self.view.center.x, self.view.center.y+40); 
textView.font = [UIFont fontWithDescriptor:desc size:24]; 
textView.text = @"ܩ̈ ܡ̄ ܬ̇ ܒ̃"; 
textView.textColor = [UIColor blackColor]; 
textView.backgroundColor = [UIColor whiteColor]; 
textView.editable = YES; 

[self.view addSubview:textView]; 

Using Core Text, the layout issue does not exist.

+1

iOS7 API讓我不高興 –

+0

@VitalyS。給它時間來成熟。 TextKit對於iOS中的Apple來說是非常新的。確保打開一個錯誤報告,以便Apple最終修復它! –

2

幾天前,我有同樣的問題,因爲你在iOS 7(但字體有所不同)。 我在設置TEXT後設置了FONT,它適用於我。所以對於你的情況:

textView.text = @"ܩ̈ ܡ̄ ܬ̇ ܒ̃"; // Setting the text. 
textView.font = [UIFont fontWithName:@"East Syriac Adiabene" size:24]; // Setting the font and it's size. 

它可能看起來很愚蠢,但它爲我工作。

另請參閱此question/answer。使用UITextView的自定義字體有很多提示,這可能對您有所幫助。

編輯:

的iOS 7還介紹了關於UITextViewselectable屬性使文本選擇。因此,請確保您已執行以下操作:

self.textField.editable = YES; 
self.textField.selectable = ON; 
+1

對不起,我在模擬器和設備上都無法使用。 –

+1

@iMS - 你可以在這裏附上你的演示項目源代碼,只有標籤,textView和自定義字體嗎?謝謝:) – iPatel