Кажется, commonlyaccepted что cellSizeForBounds:
позволяет рассчитать «естественный» размер текстового поля. Тем не менее, для NSTextField, я обнаружил, что это не совсем соответствует:.NSTextFieldCell's cellSizeForBounds: не соответствует обертыванию?
@interface MyTextField : NSTextField @end
@implementation MyTextField
- (void)textDidChange:(NSNotification *)notification {
[super textDidChange:notification];
[self validateEditing]; // Forces updating from the field editor
NSSize cellSize = [self.cell cellSizeForBounds:
NSMakeRect(0, 0, self.bounds.size.width, CGFLOAT_MAX)];
NSRect frame = self.frame;
CGFloat heightDelta = cellSize.height - frame.size.height;
frame.size.height += heightDelta;
if (!self.superview.flipped) { frame.origin.y -= heightDelta; }
self.frame = frame;
}
@end
(Обратите внимание, что я не использую Auto Layout, но принцип тот же эта проблема Безразлично 0)
Я подозреваю, что это связано с границей текстового поля, которая добавляет дополнительное смещение. Есть ли способ автоматически вычислить связь между cellSizeForBounds:
и NSTextField's frame
? Как еще я могу решить эту проблему?
Спасибо, Кен. Я надеялся, что будет какой-то более простой способ разобраться в различии, но я думаю, что это разумный подход. Для записи я обнаружил, что NSLayoutManager имеет '-usedRectForTextContainer:', который, кажется, точно представляет кадр NSTextView. Итак, я думаю, что в итоге я получу текстовое представление. – jtbandes
Ну, даже для текстового вида есть 'textContainerInset', который вам нужно учитывать, но, по крайней мере, это явно. –
Да, точно. (NSTextView также автоматически изменяет размер автоматически, но я сохраню его в виде прокрутки и изменяю размер прокрутки по мере необходимости, чтобы поддерживать максимальную высоту.) – jtbandes