NSTableCellView padding

Как я могу добавить отступы к NSTableCellView?

Я хочу, чтобы содержимое имело отступ в 10 пикселей, как в обычном HTML. (Все стороны). Текст должен быть по центру вертикально по центру.

На данный момент я делаю это в подклассе NSTextFieldCell. Но это, кажется, не работает правильно.

Когда я редактирую текст, текстовое поле редактирования не использует заполнение из текстового поля.

Изображение 2:Проверьте изображение

Проверьте изображение

Вот код, который у меня есть в настоящее время, (подкласс NSTextFieldCell)

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
NSRect titleRect = [self titleRectForBounds:cellFrame];

NSAttributedString *aTitle = [self attributedStringValue];
if ([aTitle length] > 0) {
    [aTitle drawInRect:titleRect];
}
}

- (NSRect)titleRectForBounds:(NSRect)bounds
{
NSRect titleRect = bounds;

titleRect.origin.x += 10;
titleRect.origin.y = 2;

NSAttributedString *title = [self attributedStringValue];
if (title) {
    titleRect.size = [title size];
} else {
    titleRect.size = NSZeroSize;
}

// We don't want the width of the string going outside the cell's bounds
CGFloat maxX = NSMaxX(bounds);
CGFloat maxWidth = maxX - NSMinX(titleRect);
if (maxWidth < 0) {
    maxWidth = 0;
}

titleRect.size.width = MIN(NSWidth(titleRect), maxWidth);

return titleRect; 
}

2 ответа

Решение

Ниже приведены некоторые варианты получения отступов.

Ранее у меня были некоторые проблемы с получением правильной высоты ограничительной рамки для NSAttributedString, Я не помню, как я их решил, но есть некоторые дискуссии по этому вопросу.

Идея № 1:

Используйте межклеточный интервал NSTableView. Это также доступно в Интерфейсном Разработчике от вкладки размера табличного представления. Ищите расстояние между ячейками.

Идея № 2:

При редактировании интерфейса:

  • Если вам не нужно что-то еще, используйте представление текста или изображения и ячейки текстовой таблицы, предоставленное Apple.
  • Измените высоту представления ячейки таблицы внутри представления таблицы, используя вкладку размера.
  • Переместите текстовое поле внутри представления ячейки таблицы.

Идея № 3:

Используйте пользовательскую ячейку.

  • Вы можете изменить позицию редактора поля, переопределив -[NSTextFieldCell editWithFrame:inView:editor:delegate:event:], Есть также -[NSTextFieldCell setUpFieldEditorAttributes], Я нашел этот пример кода полезным.
  • Если вы увеличите высоту ячейки, есть несколько способов сделать NSTextFieldCell нарисовать текст вертикально по центру.

Использование метода setContentInset.it устанавливает расстояние вставки между представлением содержимого и представлением вложенной таблицы.

например

self.tableView.contentInset = UIEdgeInsetsMake(-35, 0, -20, 0);
Другие вопросы по тегам