У меня есть NSTextView
, который должен быть фиксированного размера.Когда текст попадает в нижнюю строку и к правому краю обозначенного фрейма, мне нужно установить NSLineBreakByTruncatingTail
, чтобы предоставить пользователю эллиптические знаки и отключить дальнейшую печать.Когда я делаю это, устанавливая стиль абзаца на textStorage
из NSTextView
, текст прокручивается вверх, и я вижу только последнюю строку с эллиптическими знаками в конце.У меня вопрос, как предотвратить прокрутку NSTextView
при изменении lineBreakMode
?
Спасибо, Нава
РЕДАКТИРОВАТЬ: (добавлены снимки экрана) До:
После:
Теперь вот код, который делает это:
- (void)textDidChange:(NSNotification *)notification
{
NSString *text = [textView string];
CGFloat width, height;
NSRect newFrame = self.frame;
width = round([text widthForHeight:newFrame.size.height font:textView.font]);
height = round([text heightForWidth:newFrame.size.width font:textView.font]);
if (height > newFrame.size.height && width > newFrame.size.width) {
NSTextContainer *textContainer = textView.textContainer;
[textContainer setWidthTracksTextView:NO];
[textContainer setHeightTracksTextView:NO];
[textView setHorizontallyResizable:NO];
[textView setVerticallyResizable:NO];
[textView setAutoresizingMask:NSViewNotSizable];
[textView setLineBreakMode:NSLineBreakByTruncatingTail];
}
}
Функции widthForHeight
и heightForWidth
- некоторые сторонние дополнения, которые работают хорошо.Проблема в этой внезапной прокрутке, которая происходит, когда я устанавливаю NSLineBreakByTruncatingTail
.Вот функция, которая устанавливает режим разрыва строки (также стороннее добавление - от хорошего разработчика (не помню его имени)):
- (void)setLineBreakMode:(NSLineBreakMode)lineBreakMode {
NSDictionary* curAttributes = [[self textStorage] attributesAtIndex:0
effectiveRange:NULL];
NSParagraphStyle *currentStyle = [curAttributes objectForKey:NSParagraphStyleAttributeName];
if (currentStyle.lineBreakMode != lineBreakMode) {
NSMutableParagraphStyle* paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy] ;
[paragraphStyle setLineBreakMode:lineBreakMode] ;
NSMutableDictionary* attributes = [[[self textStorage] attributesAtIndex:0
effectiveRange:NULL] mutableCopy] ;
[attributes setObject:paragraphStyle
forKey:NSParagraphStyleAttributeName] ;
[paragraphStyle release] ;
NSAttributedString* attributedString = [[NSAttributedString alloc] initWithString:[self string]
attributes:attributes] ;
[attributes release] ;
[[self textStorage] setAttributedString:attributedString] ;
[attributedString release] ;
}
}