Курсор NSTextAttachment слишком велик для UITextView

Вы можете увидеть скриншот проблемы здесь

У меня есть NSTextAttachment, который я добавляю внутри UITextView, однако случайно для некоторых фотографий после вставки изображения курсор становится очень большим при редактировании. Я попытался исправить следующее, но безуспешно:

  1. Установите керн с помощью NSKernAttributeName
  2. Установка высоты строки с помощью NSMutableParagraphStyle
  3. Установка атрибутов ввода для NSTextAttachment.
    NSAttributedString *attachmentImage = [NSAttributedString attributedStringWithAttachment:attachment];
    [attachmentImage boundingRectWithSize:image.size options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];
    NSAttributedString *spacer = [[NSAttributedString alloc]initWithString:@"\n\n"];
    NSAttributedString *prefixAttachmentString = spacer;
    if([self.text isEqualToString:@""]){prefixAttachmentString = [[NSAttributedString alloc]initWithString:@""];} //no spacer if text empty
    NSMutableAttributedString *attachmentString = [[NSMutableAttributedString alloc]initWithAttributedString:prefixAttachmentString];
    [attachmentString appendAttributedString:attachmentImage];
    NSKernAttributeName
    NSMutableParagraphStyle *paragraphSytle = [[NSMutableParagraphStyle alloc]init];
    NSLog(@"image attachment: %@", attachmentImage);
    NSLog(@"image cursor size: %f", image.size.height);
    paragraphSytle.paragraphSpacingBefore = 0.0;
    paragraphSytle.lineSpacing = 10;
    [attachmentString addAttributes:@{@"attachmentName" : name, NSParagraphStyleAttributeName : paragraphSytle}
                              range:NSMakeRange((int)prefixAttachmentString.length,1)];
    [attachmentString addAttributes:self.typingAttr range:NSMakeRange((int)prefixAttachmentString.length,1)];

    [attachmentString appendAttributedString:spacer];
    [self.textStorage insertAttributedString:attachmentString
                                     atIndex:(int)(self.selectedRange.location)];
    
    [attachmentString addAttributes:self.typingAttr range:NSMakeRange(0,attachmentString.length)];
    
    self.selectedRange = NSMakeRange(self.selectedRange.location+(int)attachmentString.length, self.selectedRange.length);
    
    [self.textStorage endEditing];```



person Kevin Hagens Jr.    schedule 14.04.2021    source источник
comment
Возможно, это поможет вам stackoverflow.com/a/20311650   -  person mbi    schedule 15.04.2021