2013-05-02 136 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