【问题标题】:dynamically resizing UITextView width and height动态调整 UITextView 的宽度和高度
【发布时间】:2013-03-21 20:41:07
【问题描述】:

我的代码会根据文本动态调整。当我们按下回车键时,它会增加高度 除非我们按回车键,否则会增加宽度。

但是我该怎么做呢

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
CGFloat height = [textView.text sizeWithFont:textView.font].height;
CGFloat width =  [textView.text sizeWithFont:textView.font].width;
 if ([[NSCharacterSet newlineCharacterSet] characterIsMember:[text characterAtIndex:text.length-1]])
 {
     self.textViewHeight += height;

     [textView setFrame:CGRectMake(self.contentView.frame.origin.x, self.contentView.frame.origin.y, width, self.textViewHeight)];
     self.contentView.frame = textView.frame;
     self.frame = textView.frame;
     [_editButton setFrame:CGRectMake(self.contentView.frame.size.width - 14, 0, 28, 28)];
   }
    else{

    int charsAsInt = (int)(textView.text.length);
    CGFloat charWidth = width / charsAsInt;

    [textView setFrame:CGRectMake(self.contentView.frame.origin.x, self.contentView.frame.origin.y, width+ charWidth, self.textViewHeight)];
     self.contentView.frame = textView.frame;
     self.frame = textView.frame;
     [_editButton setFrame:CGRectMake(self.contentView.frame.size.width - 14, 0, 28, 28)];


}

但即使我按下回车它也会增加宽度。如何预防。

【问题讨论】:

    标签: ios uitextview uitextviewdelegate


    【解决方案1】:

    好的,宽度是所有行中整个文本的宽度。所以必须找到最大线长。

    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
    {
    CGFloat height = [textView.text sizeWithFont:textView.font].height;
    //CGFloat lineWidth;
    
    int charsAsInt;
     if ([[NSCharacterSet newlineCharacterSet] characterIsMember:[text characterAtIndex:text.length-1]])
     {
         self.lineWidth = 0;
         newLine = @"";
         self.textViewHeight += height;
         NSLog(@"height: %f, width: %f, new Height: %f", height, self.textViewWidth, self.textViewHeight);
         [textView setFrame:CGRectMake(self.contentView.frame.origin.x, self.contentView.frame.origin.y, self.textViewWidth, self.textViewHeight)];
         self.contentView.frame = textView.frame;
         self.frame = textView.frame;
         [_editButton setFrame:CGRectMake(self.contentView.frame.size.width - 14, 0, 28, 28)];
    
         [super setFrame:textView.frame];
     }
     else{
         newLine = [newLine stringByAppendingString:text];
         self.lineWidth = [newLine sizeWithFont:textView.font].width;
         charsAsInt = (int)(newLine.length);
         CGFloat charWidth = self.lineWidth / charsAsInt;
    
    
         if(self.lineWidth >= self.textViewWidth){
             self.textViewWidth = self.lineWidth;
             [textView setFrame:CGRectMake(self.contentView.frame.origin.x, self.contentView.frame.origin.y, self.lineWidth, self.textViewHeight)];
         }
    
         else{
             [textView setFrame:CGRectMake(self.contentView.frame.origin.x, self.contentView.frame.origin.y, self.textViewWidth, self.textViewHeight)];
         }
         self.contentView.frame = textView.frame;
         self.frame = textView.frame;
         [_editButton setFrame:CGRectMake(self.contentView.frame.size.width - 14, 0, 28, 28)];
         //[super setContentView:self.contentView];
         [super setFrame:textView.frame];
    }
    
    return YES;
    }
    

    发生的事情是我们有一个多行 UITextView 贴纸,所以当你在键盘上按回车键时,你有一个新行。我现在将其存储在一个新变量中。只有当新行的宽度大于旧行的宽度时,整个 textVIew 的宽度才会增加(self.textViewWidth)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-30
      • 1970-01-01
      • 2019-01-27
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      相关资源
      最近更新 更多