2013-05-02 140 views
4

我已經創建了自定義UITextView類,其中textView動態增長,因爲用戶類型字符和textview框架動態調整大小。我想垂直對齊框架中的文本,它總是默認情況下到底部。 UIEdgeInsets使它或看起來像它到中心,但它爲我創造更多的問題。如果我嘗試設置內容偏移然後textView中心也shift.Is內容偏移和textView中心互相影響?。我想textview中心在哪裏它只是textView內部的文本垂直居中。 最初我設置的UITextView字體23.0具有矩形邊框(TextView的幀層邊界)。當我開始在框中的文本上border.Then的底部來鍵入我使用UITextView文本垂直對齊

[textView setContentInset:UIEdgeInsetsMake(5,0,10,0)]; 

,使文字在中心。然後我必須發送這個文本進行打印,放置在UIImageView上。在這裏,我使用Paras提到的代碼來匹配打印機dpi並調整它的大小。但是在UIImageview中顯示的文本與打印的確切位置不匹配,因爲我已經添加UIEdgeInset調整垂直對齊

+0

提供一些例子中,你是如何準確地設置UIEdgeInsets爲了你?編輯後添加 – 2013-05-02 09:51:13

+0

:那麼這是另一種類型的問題,因爲正確的方法是按照您指定的方式使用UIEdgeInsets(至少在您的初始問題上回答了這個屬性)。 – 2013-05-02 10:30:18

+0

請參閱此處發佈的同一問題的答案:http://stackoverflow.com/a/24871575/3499969 – 2014-08-14 22:03:47

回答

-1

我有兩種類型,設置動態高度爲UITextView看都是波紋管......

UPDATE:

首先創建UITextView編程像波紋管.. 。

-(IBAction)btnAddTextView:(id)sender 
{ 
    UIView *viewTxt = [[UIView alloc]initWithFrame:CGRectMake(imgBackBoard.center.x - 100,20, 220, 84)]; 
    [viewTxt setBackgroundColor:[UIColor clearColor]]; 
    viewTxt.userInteractionEnabled = YES; 

    UITextView *txtAddNote=[[UITextView alloc]initWithFrame:CGRectMake(20,20, 180, 44)]; 
    [txtAddNote setBackgroundColor:[UIColor scrollViewTexturedBackgroundColor]]; 
    [txtAddNote setFont:[UIFont fontWithName:@"Helvetica-Bold" size:15]]; 
    txtAddNote.layer.borderWidth = 2.0; 
    txtAddNote.layer.borderColor= [UIColor redColor].CGColor; 
    viewTxt.tag = 111; 
    txtAddNote.tag = 111; 
    txtAddNote.userInteractionEnabled= YES; 
    txtAddNote.delegate = self; 
    txtAddNote.textColor = [UIColor whiteColor]; 
    [viewTxt addSubview:txtAddNote]; 
    [viewBoard addSubview:viewTxt]; 
    [txtAddNote release]; 

} 

首先

1.此波紋管的方法是UITextViewDelegate委託方法。在.h

添加此UITextViewDelegate然後給textView.delegateself像波紋管..

yourTextView.delegate = self; 

,並使用粘貼此波紋管方法...

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
    textView.frame = CGRectMake(textView.frame.origin.x, textView.frame.origin.y, textView.frame.size.width, textView.contentSize.height); 
    return YES; 
} 

這裏的時候,你UITextView編輯在一段時間與它的文本,textView的內容大小是變化的。

2.用我的波紋管自定義方法爲UILableUITextField設置動態高度也UITextView

-(float) calculateHeightOfTextFromWidth:(NSString*) text: (UIFont*)withFont: (float)width :(UILineBreakMode)lineBreakMode 
{ 
[text retain]; 
[withFont retain]; 
CGSize suggestedSize = [text sizeWithFont:withFont constrainedToSize:CGSizeMake(width, FLT_MAX) lineBreakMode:lineBreakMode]; 

[text release]; 
[withFont release]; 

return suggestedSize.height; 
} 

使用這種方法就像波紋管......

CGSize sizeToMakeLabel = [yourTextView.text sizeWithFont:yourTextView.font]; 
yourTextView.frame = CGRectMake(yourTextView.frame.origin.x, yourTextView.frame.origin.y, 
sizeToMakeLabel.width, sizeToMakeLabel.height); 

我希望這是對你有幫助:)

+0

我認爲每次插入UITextView時都會改變框架,這不是一個好主意。用戶應該使用NSString sizeWithFont:或類似的方法來計算文本的高度,如果行數改變只有一個應該改變框架 – 2013-05-02 09:52:56

+0

@ art-divin雅我也有這種類型的代碼,但這很容易和簡單,所以首先我發佈此.. – 2013-05-02 09:54:06

+0

@ user1226038也看到這個答案.. http://stackoverflow.com/questions/12591192/center-text-vertically-in-a-uitextview希望這對你有幫助...: )+1 – 2013-05-02 10:20:04