2012年2月25日土曜日

LionのIKImageBrowserのバグ

Lion(10.7.3で確認)ではIKImageBrowserのcellSizeを256*96のように横長のサイズに設定すると、右のスクリーンショットのように、上下のセルが重なって表示されてしまう問題があります。これはimageFrameの高さが実際のセルの高さより高く計算されてしまうのが原因のようですので、下記のようにNSImageBrowserCellのimageFrameをオーバーライドして、強制的にimageFrameの高さを実際のセルサイズ内に収めると問題を回避できます。



- (NSRect)imageFrame
{
NSRect imageFrame;
NSRect frame;
CGFloat maxHeight;
CGFloat ratio;
// Work around code for Mac OS X 10.7.x Lion's bug.
frame = [super frame];
imageFrame = [super imageFrame];
maxHeight = NSHeight(frame) - 20;
if(NSWidth(imageFrame) > maxHeight) {
ratio = maxHeight / NSWidth(imageFrame);
imageFrame.size = NSMakeSize(maxHeight, NSHeight(imageFrame) * ratio);
imageFrame.origin = NSMakePoint(NSMidX(frame) - NSWidth(imageFrame) / 2
NSMidY(frame) - NSHeight(imageFrame) / 2 + 10);
}
return imageFrame;
}


0 件のコメント:

コメントを投稿