IOS 多行文本auto layout (textview)

需求:最多4行,最多50个字符。

IOS 多行文本auto layout (textview)_第1张图片
IMG_0848.PNG

delegate

- (void)awakeFromNib
{
    [super awakeFromNib];
    _textView.delegate = self;

}

不能出现4个以上换行符,不能字数超过50

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    static const NSUInteger MAX_NUMBER_OF_LINES_ALLOWED = 4;
    
    NSMutableString *t = [NSMutableString stringWithString:
                          self.textView.text];
    [t replaceCharactersInRange: range withString: text];
    
    NSUInteger numberOfLines = 0;
    for (NSUInteger i = 0; i < t.length; i++) {
        if ([[NSCharacterSet newlineCharacterSet]
             characterIsMember: [t characterAtIndex: i]]) {
            numberOfLines++;
        }
    }
    
    if(textView.text.length + (text.length - range.length) <= 50){
         return (numberOfLines < MAX_NUMBER_OF_LINES_ALLOWED);
    }else{
        return NO;
    }
}

自动换行高度不能超过字体高度的4倍,并且调节高度

- (void)textViewDidChange:(UITextView *)textView
{
    CGFloat fixedWidth = textView.frame.size.width;
    CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
    CGRect newFrame = textView.frame;
    newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height);
    
    NSUInteger maxNumberOfLines = 4;
    NSUInteger numLines = newFrame.size.height/textView.font.lineHeight;
    
    if (numLines <= maxNumberOfLines)
    {
        _oldText = textView.text;
        textView.frame = newFrame;
    }else{
         textView.text = _oldText;
    }
  
}

你可能感兴趣的:(IOS 多行文本auto layout (textview))