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);