2013-04-05 71 views
34

在SO上有很多很好的例子來刪除UITextView的左邊填充。IOS - 從UITextView中刪除所有填充

How to lose margin/padding in UITextView?

不過,我需要刪除右側填充了。

我已經試過......

[tv setContentInset: UIEdgeInsetsMake(-4,-8,-8,-X)];//where X is any integer 

和最後兩個值的幾乎所有其他置換來去除填充和似乎沒有任何工作。也試圖

[tv sizeToFit]; 
[tv setTextAlignment:[NSTextAlignmentRight]]; 

在TextView中下面的文字寫着 「00」

enter image description here

+0

我試圖用空字符串替換空字符串,如您所說。但是,如果我現在將插圖註釋掉了,我會再次填充頂部和左側填充。 – mattyd 2013-04-05 01:18:12

+0

不是空的,空的。用'「」'(空)替換''「'(空格)。是否有可能用自定義的UILabel替換UITextView? – 2013-04-05 20:04:57

+0

我將String設置爲「00」,沒有空格。我不確定它是否可行,但我爲navigation.rightbarbuttonitem創建了一個UIview,然後用自定義視圖初始化。我添加了一個圖像視圖和一個textview到視圖,我沒有想到我可以子視圖標籤 – mattyd 2013-04-05 20:30:40

回答

124

雖然iOS的7只,非常乾淨的解決方案是設置的TextView的textContainerInsets這樣:

[textView setTextContainerInset:UIEdgeInsetsZero]; 
textView.textContainer.lineFragmentPadding = 0; // to remove left padding 

這將有效地刪除文本視圖內文本週圍的所有填充(插頁)。如果您的部署目標是iOS 7+,那麼這是迄今爲止最好的解決方案。

+1

恐怕這不起作用,即使是我的iOS7 +項目。 – 2013-12-02 04:26:32

+0

完全按照規定工作。 UITextView textContainerInset專門用於此目的,因爲它不需要子類,所以它是運行iOS7及更高版本系統的最佳答案。 – Biclops 2014-02-14 20:11:29

+50

添加此行也刪除左填充 'self.textView.textContainer.lineFragmentPadding = 0;' – 2014-03-08 07:15:10

6

請重子類中的UITextView並覆蓋下面的方法:

- (id)styleString 
{ 
    return [[super styleString] stringByAppendingString:@"; line-height: 1.6em;margin-right: 30px; margin-left: 0px; margin-top: 0px;"]; 
} 

顯然;你可以調整任何你想要的利潤率左,上邊距&;)

+1

這是iOS6的最佳解決方案。但它需要像下面這樣聲明:'@interface UITextView(Stylesheet) - (id)styleString; @ end' – situee 2014-01-27 08:44:59

+1

從過去的這個答案仍然非常輝煌,但最近在Swift(dbart/mattsven等)中的答案是Swift的答案! – Fattie 2016-06-28 18:06:26

-2

我的問題就解決了這樣

if([Utils isiOS7orHigher]){ 
    commentView.textContainerInset = UIEdgeInsetsZero; 
}else { 
    commentView.contentInset = UIEdgeInsetsMake(-11,-8,0,0); 
} 

更多看到http://foobarpig.com/iphone/get-rid-of-uitextview-padding.html

+2

一般來說,在您的else語句中強行編碼值並不是一個好主意。您永遠不會知道這會在未來或者跨設備和什麼都顯示。 – 2014-11-19 22:08:54

11

要完全刪除所有填料,lineFragmentPadding必須加以考慮。

let padding = textView.textContainer.lineFragmentPadding 
textView.textContainerInset = UIEdgeInsetsMake(0, -padding, 0, -padding) 

lineFragmentPadding默認值是5,位於片段矩形的開始和結尾處。

有些答案建議將lineFragmentPadding設置爲0.但是,按照文檔中的討論,它不是用來表示文本邊距。所以不要將它設置爲0.