macOS NSTabViewController центрированные значки вкладок

У меня есть приложение MacOS, которое я создал. И у меня есть окно настроек, построенное с использованием быстрой и раскадровки с панелью инструментов в виде таблицы в стиле NSTabViewController.

Однако я не вижу возможности переопределить расположение значков вкладок - они по умолчанию располагаются в левой части окна. Является ли это возможным?

введите описание изображения здесь

4 ответа

Решение

Подкласс NSTabViewController и переопределить func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier], Добавить flexibleSpace Элемент панели инструментов с обеих сторон.

Следуя совету Виллекса, я придумал это переопределение в моем NSTabViewController подкласс:

override func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {

    super.toolbarDefaultItemIdentifiers(toolbar)

    var arr = Array<NSToolbarItem.Identifier>()
    for item in self.tabViewItems {
        if let identifier = item.identifier {
            arr.append(NSToolbarItem.Identifier.init(identifier as! String))
        }
    }

    //insert flexible spaces at first and last index
    arr.insert(NSToolbarItem.Identifier.flexibleSpace, at: 0)
    arr.append(NSToolbarItem.Identifier.flexibleSpace)

    return arr
}

ОС:

      -(NSArray<NSToolbarItemIdentifier> *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar{
NSMutableArray *arr = [[super toolbarDefaultItemIdentifiers:toolbar] mutableCopy];
[arr insertObject:[[NSToolbarItem alloc] initWithItemIdentifier:NSToolbarFlexibleSpaceItemIdentifier].itemIdentifier atIndex:0];
[arr addObject:[[NSToolbarItem alloc] initWithItemIdentifier:NSToolbarFlexibleSpaceItemIdentifier].itemIdentifier];
return arr;

}

Быстрый:

      override func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
    var array = super.toolbarDefaultItemIdentifiers(toolbar)
    array.insert(NSToolbarItem.Identifier.flexibleSpace, at: 0)
    array.append(NSToolbarItem.Identifier.flexibleSpace)
    return array
}
Другие вопросы по тегам