Merge pull request #1701 from slevenbits/slevenbits-tab-view-resize-fix

Fixed: tab views added in IB didn't resize properly.
This commit is contained in:
Alexander Ljungberg
2012-12-15 00:37:18 +00:00
2 changed files with 47 additions and 22 deletions
+25 -16
View File
@@ -88,9 +88,6 @@ var CPTabViewDidSelectTabViewItemSelector = 1,
_box = [[CPBox alloc] initWithFrame:[self bounds]];
[self setBackgroundColor:[CPColor colorWithCalibratedWhite:0.95 alpha:1.0]];
[_box setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable];
[_tabs setAutoresizingMask:CPViewMinXMargin | CPViewMaxXMargin];
[self addSubview:_box];
[self addSubview:_tabs];
}
@@ -343,21 +340,9 @@ var CPTabViewDidSelectTabViewItemSelector = 1,
_type = aTabViewType;
if (_type !== CPTopTabsBezelBorder && _type !== CPBottomTabsBezelBorder)
{
[_box setFrame:[self bounds]];
[_tabs removeFromSuperview];
}
else
{
var aFrame = [self frame],
segmentedHeight = _CGRectGetHeight([_tabs frame]),
origin = _type === CPTopTabsBezelBorder ? segmentedHeight / 2 : 0;
[_box setFrame:_CGRectMake(0, origin, _CGRectGetWidth(aFrame),
_CGRectGetHeight(aFrame) - segmentedHeight / 2)];
[self addSubview:_tabs];
}
switch (_type)
{
@@ -373,6 +358,29 @@ var CPTabViewDidSelectTabViewItemSelector = 1,
[_box setBorderType:CPNoBorder];
break;
}
[self setNeedsLayout];
}
- (void)layoutSubviews
{
// Even if CPTabView's autoresizesSubviews is NO, _tabs and _box has to be laid out.
// This means we can't rely on autoresize masks.
if (_type !== CPTopTabsBezelBorder && _type !== CPBottomTabsBezelBorder)
{
[_box setFrame:[self bounds]];
}
else
{
var aFrame = [self frame],
segmentedHeight = _CGRectGetHeight([_tabs frame]),
origin = _type === CPTopTabsBezelBorder ? segmentedHeight / 2 : 0;
[_box setFrame:_CGRectMake(0, origin, _CGRectGetWidth(aFrame),
_CGRectGetHeight(aFrame) - segmentedHeight / 2)];
[self _repositionTabs];
}
}
/*!
@@ -497,7 +505,6 @@ var CPTabViewItemsKey = "CPTabViewItemsKey",
[_items makeObjectsPerformSelector:@selector(_setTabView:) withObject:self];
[self _updateItems];
[self _repositionTabs];
[self setDelegate:[aCoder decodeObjectForKey:CPTabViewDelegateKey]];
@@ -506,6 +513,8 @@ var CPTabViewItemsKey = "CPTabViewItemsKey",
[self selectTabViewItem:selected];
[self setTabViewType:[aCoder decodeIntForKey:CPTabViewTypeKey]];
[self setNeedsLayout];
}
return self;
+22 -6
View File
@@ -11,15 +11,18 @@
@implementation AppController : CPObject
{
CPTabView tabView1;
}
- (void)applicationDidFinishLaunching:(CPNotification)aNotification
{
var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask],
contentView = [theWindow contentView];
var tabView = [[CPTabView alloc] initWithFrame:CGRectMake(50,50,400,400)];
[tabView setTabViewType:CPNoTabsBezelBorder];
[tabView setTabViewType:CPTopTabsBezelBorder];
tabView1 = [[CPTabView alloc] initWithFrame:CGRectMake(50,50,400,400)];
[tabView1 setTabViewType:CPNoTabsBezelBorder];
[tabView1 setTabViewType:CPTopTabsBezelBorder];
var tabs = [
"First Tab", "a label",
@@ -39,14 +42,27 @@
var item = [[CPTabViewItem alloc] initWithIdentifier:tabs[i]];
[item setView:view];
[item setLabel:tabs[i]];
[tabView addTabViewItem:item];
[tabView1 addTabViewItem:item];
}
[contentView addSubview:tabView];
[contentView addSubview:tabView1];
[tabView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable];
[tabView1 setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable];
var toggleButton = [CPButton buttonWithTitle:@"Cycle Tab View Type"];
[toggleButton setAction:@selector(switchTabType:)];
[toggleButton setTarget:self];
[toggleButton sizeToFit];
[toggleButton setFrameOrigin:CGPointMake(CGRectGetWidth([contentView frame]) - CGRectGetWidth([toggleButton frame]) - 15, 15)];
[toggleButton setAutoresizingMask:CPViewMinXMargin | CPViewMaxYMargin];
[contentView addSubview:toggleButton];
[theWindow orderFront:self];
}
- (@action)switchTabType:(id)sender
{
[tabView1 setTabViewType:[tabView1 tabViewType] < CPNoTabsNoBorder ? [tabView1 tabViewType] + 1 : CPTopTabsBezelBorder];
}
@end