Изменение размера nspopover

Я пытаюсь изменить размер NSPopover перед его отображением, установив фрейм NSView, который он содержит, с помощью метода:

setFrameSize:

Однако, когда я пытаюсь отобразить всплывающее окно, вызвав:

showRelativeToRect: ofView: preferredEdge:

Вид возвращается к прежнему размеру. Почему это происходит? Есть ли другой способ, которым я должен определять размер всплывающего окна?

Заранее спасибо, Бен.


person BenJacob    schedule 17.01.2013    source источник


Ответы (2)


Во всплывающем окне есть setContentSize, но у меня сложилось впечатление, что это не так хорошо работает. Я имею в виду, что это работает, но изменяет размер содержимого (включая дочерние представления). Поэтому лучший способ — создать новый NSViewController и назначить ему новое представление. При установке этого нового контроллера в NSPopover размер правильно соблюдается, и если всплывающее окно отображается в настоящее время, оно будет анимировано в новом представлении.

Если вы не можете этого сделать, но вместо этого хотите изменить размер содержимого на месте, используйте что-то вроде этого:

NSRect frame = valuePopupList.frame;
frame.origin = NSMakePoint(2, 2);

... determine new frame ...

NSSize contentSize = frame.size;
contentSize.width += 4; // Border left/right.
contentSize.height += 4; // Ditto for top/bottom.
if (contentSize.height < 26) {
    contentSize.height = 26;
}
valuePopupList.frame = frame;
statementsPopover.contentSize = contentSize;

[statementsPopover showRelativeToRect: area ofView: view preferredEdge: NSMaxXEdge];
valuePopupList.frameOrigin = frame.origin;
person Mike Lischke    schedule 22.04.2013

Вы должны реализовать -preferredContentSize в вашем NSViewController, который содержится во всплывающем окне. Кажется, это самый надежный способ контролировать размер всплывающего окна.

person Stargazer    schedule 20.02.2019