I got a work-around.
The issue seems to be that figures are automagically resized when they don't fit on the screen, and this messes up any kind of placement of uicontrols, axes, etc. on the figure.
The workaround is to determine a safe length scaling factor based on screen resolution reported by
ScreenSize = get(0,'ScreenSize');
SPPI = get(0,'ScreenPixelsPerInch');
SH = floor((ScreenSize(4)-200)/SPPI);
SMult = SH/(PaperSize(2));
And scale all lengths and positions of uicontrols in the figure by this amount.
The next step is to rely on the behavior of
which asserts a 0.25" margin but otherwise fills the page, and so define our figure on screen as
printMargin = 0.25;
FigureSize = (PaperSize-2*printMargin) * SMult;
This seems to work reasonably well...so far...
Best Answer