2014-11-06 5 views
8

Я не могу понять, как отключить отсечение подвью/подслоя, когда мой пользовательский вид определен в Interface Builder. Когда я создаю представление программным образом и выполняю настройку, найденную во многих вопросах здесь, в StackOverflow, он отлично работает для обоих подзаголовков, добавленных в представление, и подслоев, добавленных в view.layer. Эти вещи:Невозможно отключить обрезку экземпляров NSView, созданных в Interface Builder

((NSView*)containingWindow.contentView).wantsLayer = YES; 
view.wantsLayer = YES; 
view.layer.masksToBounds = NO; 

После того, как это делается (в таком порядке), все прекрасно работает для представлений, которые создаются в коде. Если я делаю то же самое (или что-то еще, если на то пошло) для представлений, созданных в IB, я никуда не могу.

Я попытался с помощью пользовательского NSView, который определяет метод:

- (CALayer*)makeBackingLayer { 
    CALayer* layer = [CALayer layer]; 
    layer.masksToBounds = NO; 

    return layer; 
} 

- (BOOL)wantsDefaultClipping { 
    return NO; 
} 

Не помогает. Я также попытался проверить флажок в разделе «Core Animation Layer» в представлении эффектов в IB. Это тоже не помогло. Наконец, я попытался отключить ограничения, на всякий случай это было ответственным. Не работает.

Любая помощь приветствуется. Одна вещь, которую я замечаю, заключается в том, что мой вид слоя поддержки «masksToBounds» начинается с NO, как я его устанавливал, но когда я регистрирую иерархию представлений позже, он стал ДА на том же самом представлении (подтвержденном его адресом памяти.)

+0

Вы нашли ответ на этот вопрос? У меня похожие проблемы, хотя я не использую IB. –

ответ

-3

Try:

myView.wantsDefaultClipping = NO; 

и сделать это также для представлений детей.

+0

«хочетDefaultClipping» не является свойством, которое нужно установить, это только метод, который должен быть реализован в пользовательском представлении. И да, я попробовал это. –

+0

@ Эрик и пробовал для просмотра детей? – nicael

+0

Да, и эквивалентная вещь для CALayer (childLayer.maskstoBounds = NO;). Единственное отличие заключается в том, создается ли основной вид из NIB или выполняется в коде. –