【问题标题】:UITextView text vertical AlignmentUITextView 文本垂直对齐
【发布时间】:2013-04-26 10:33:48
【问题描述】:

我创建了自定义 UITextView 类,其中 textView 会随着用户键入字符而动态增长,并且 textview 框架会动态调整大小。我想在框架中垂直居中对齐文本,默认情况下它总是在底部。我添加了 @987654323 @ 使或看起来像中心,但它给我带来了更多问题。如果我尝试设置内容偏移量,那么 textView 中心也会发生变化。内容偏移量和 textView 中心是否相互影响?我想要 textview 中心在哪里它是,但 textView 内的文本保持垂直居中。 最初我设置 UITextView 字体 23.0 带有矩形边框(textview 框架层边框)。当我开始在该框中输入文本时,文本出现在边框的底部。然后我正在使用

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

使文本居中。然后我必须发送这个文本进行打印,它放置在 UIImageView 上。这里我使用 Paras 提到的代码来匹配打印机 dpi 并调整它的大小。但是 UIImageview 上的文本与打印的确切位置不匹配,因为我添加了 UIEdgeInset 来调整垂直对齐方式

【问题讨论】:

  • 提供一些示例,您究竟是如何设置 UIEdgeInsets 以及它究竟为您带来了什么问题?
  • 在编辑后添加:那么这是另一种类型的问题,因为正确的方法是按照您指定的方式使用 UIEdgeInsets (至少您最初问题的答案位于此属性后面)。
  • 查看此处发布的同一问题的答案:stackoverflow.com/a/24871575/3499969

标签: iphone ios objective-c ipad uitextview


【解决方案1】:

我有两种类型可以将动态高度设置为UITextView,两者都在下面...

更新:

首先像下面这样以编程方式创建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.delegate 提供给self,如下所示..

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.使用我的自定义方法设置UILableUITextFieldUITextView的动态高度

-(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); 

【讨论】:

  • 我认为每次插入符号时更改 UITextView 的框架不是一个好主意。用户应使用 NSString sizeWithFont: 或类似的方法来计算文本的高度,如果仅更改行数,则应更改框架
  • @art-divin 是的,我也有这种类型的代码,但这非常容易和简单,所以首先我发布这个..
  • @user1226038 也看到这个答案.. stackoverflow.com/questions/12591192/… 希望这对你有帮助... :) +1
  • 看我用我的 uPdated 代码创建 UITextView 等待我将发布,它工作得很好你在 uitextview 的边界看到的每一个文本......我将更新该代码......
  • @ParasJoshi 作者询问的是 UITextView 内文本的中心位置,而不是调整整个 UITextView 的大小
猜你喜欢
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 2012-12-09
相关资源
最近更新 更多