Ben bir NSTextView [1] HTML alt kümesini düzenliyor ve ben bir <saat> etiket benzetmek istiyorum.NSTextAttachmentCell bir mil yüksek
Bunu yapmanın yolunun NSTextAttachment ve özel bir NSTextAttachmentCell ile olduğunu ve kodun eki ve hücreyi eklemek için yazıldığını öğrendim. Sorun şu ki, hücrenin altında muazzam miktarda boşluk var.
Bu alan hücrenin kendisinin bir parçası değildir; hücrenin tüm alanını kırmızıya çizersem tam olarak doğru boyutta olur, ancak metin görünümü bir sonraki satır metnini kırmızıdan çok aşağıda tutar. Miktar, hücresinin üstündeki metnin ne kadarının olduğuna bağlıdır; Ne yazık ki, <hr> etiketlerinin çok önemli olduğu uzun belgelerle çalışıyorum ve bu uygulamada büyük sorunlara neden oluyor.
halt neler oluyor?
cep alt sınıfının para parçalar:
- (NSRect)cellFrameForTextContainer:(NSTextContainer *)textContainer
proposedLineFragment:(NSRect)lineFrag glyphPosition:(NSPoint)position
characterIndex:(NSUInteger)charIndex {
lineFrag.size.width = textContainer.containerSize.width;
lineFrag.size.height = topMargin + TsStyleBaseFontSize *
heightFontSizeMultiplier + bottomMargin;
return lineFrag;
}
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
characterIndex:(NSUInteger)charIndex
layoutManager:(NSLayoutManager *)layoutManager {
NSRect frame = cellFrame;
frame.size.height -= bottomMargin;
frame.size.height -= topMargin;
frame.origin.y += topMargin;
frame.size.width *= widthPercentage;
frame.origin.x += (cellFrame.size.width - frame.size.width)/2;
[color set];
NSRectFill(frame);
}
[1] isEditable seti ve üretilen biçimlendirmeye sahip bir WebView unusably kirli-özellikle, ben bulamadım oldu çalıştı metni, <p> etiketlerinde güzelce sarmalama yolu. eki dize oluşturur
- (void)insertHorizontalRule:(id)sender {
NSAttributedString * rule = [TsPage newHorizontalRuleAttributedStringWithStylebook:self.book.stylebook];
NSUInteger loc = self.textView.rangeForUserTextChange.location;
if(loc == NSNotFound) {
NSBeep();
return;
}
if(loc > 0 && [self.textView.textStorage.string characterAtIndex:loc - 1] != '\n') {
NSMutableAttributedString * workspace = rule.mutableCopy;
[workspace.mutableString insertString:@"\n" atIndex:0];
rule = workspace;
}
if([self.textView shouldChangeTextInRange:self.textView.rangeForUserTextChange replacementString:rule.string]) {
[self.textView.textStorage beginEditing];
[self.textView.textStorage replaceCharactersInRange:self.textView.rangeForUserTextChange withAttributedString:rule];
[self.textView.textStorage endEditing];
[self.textView didChangeText];
}
[self.textView scrollRangeToVisible:self.textView.rangeForUserTextChange];
[self reloadPreview:sender];
}
Ve TsPage yöntemi:
yatay kural eki ekler kodu için Rob Keniger talebini cevaplamak için
+ (NSAttributedString *)newHorizontalRuleAttributedStringWithStylebook:(TsStylebook*)stylebook {
TsHorizontalRuleCell * cell = [[TsHorizontalRuleCell alloc] initTextCell:@"—"];
cell.widthPercentage = 0.33;
cell.heightFontSizeMultiplier = 0.25;
cell.topMargin = 12.0;
cell.bottomMargin = 12.0;
cell.color = [NSColor blackColor];
NSTextAttachment * attachment = [[NSTextAttachment alloc] initWithFileWrapper:nil];
attachment.attachmentCell = cell;
cell.attachment = attachment;
NSAttributedString * attachmentString = [NSAttributedString attributedStringWithAttachment:attachment];
NSMutableAttributedString * str = [[NSMutableAttributedString alloc] initWithString:@""];
[str appendAttributedString:attachmentString];
[str.mutableString appendString:@"\n"];
return str;
}
sen Can metin ekini nstextView'inize nasıl eklediğinizi gösteren kodu postalayın. –
Rob, görmek istediğin kodu ekledim. Buna bir göz attığın için teşekkürler! –