Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 动态调整UITextView宽度和高度的大小_Ios_Uitextview_Uitextviewdelegate - Fatal编程技术网

Ios 动态调整UITextView宽度和高度的大小

Ios 动态调整UITextView宽度和高度的大小,ios,uitextview,uitextviewdelegate,Ios,Uitextview,Uitextviewdelegate,我的代码根据文本进行动态调整。当我们按下回车键和回车键时,它会增加高度 增加宽度,除非按return键 但是我该怎么做呢 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { CGFloat height = [textView.text sizeWithFont:textView.font].height; CGFloat

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

但是我该怎么做呢

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


}

但即使我按return键,它也会增加宽度。如何防止这种情况。

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

- (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的宽度才会增加。textViewWidth