mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-11-03 05:39:45 +00:00
Fix for tableview breaking when header view is removed.
Reviewed by me.
This commit is contained in:
1 parent
58e06142b9
commit
98e18340b7
2 files changed
+76
-41
No files matched your search
+49
-39
@@ -39,6 +39,7 @@
|
||||
{
|
||||
CPClipView _contentView;
|
||||
CPClipView _headerClipView;
|
||||
CPView _cornerView;
|
||||
|
||||
BOOL _hasVerticalScroller;
|
||||
BOOL _hasHorizontalScroller;
|
||||
@@ -140,13 +141,9 @@
|
||||
- (void)setDocumentView:(CPView)aView
|
||||
{
|
||||
[_contentView setDocumentView:aView];
|
||||
[_headerClipView setDocumentView:[self _headerView]];
|
||||
|
||||
var cornerView = [self _cornerView];
|
||||
|
||||
if (cornerView)
|
||||
[self addSubview:cornerView];
|
||||
|
||||
// FIXME: This should be observed.
|
||||
[self _updateCornerAndHeaderView];
|
||||
[self reflectScrolledClipView:_contentView];
|
||||
}
|
||||
|
||||
@@ -189,7 +186,7 @@
|
||||
|
||||
var documentFrame = [documentView frame], // the size of the whole document
|
||||
contentFrame = [self bounds], // assume it takes up the entire size of the scrollview (no scrollers)
|
||||
headerClipViewFrame = [self headerClipViewFrame],
|
||||
headerClipViewFrame = [self _headerClipViewFrame],
|
||||
headerClipViewHeight = _CGRectGetHeight(headerClipViewFrame);
|
||||
|
||||
contentFrame.origin.y += headerClipViewHeight;
|
||||
@@ -238,7 +235,7 @@
|
||||
|
||||
if (shouldShowVerticalScroller)
|
||||
{
|
||||
var verticalScrollerY = MAX(_CGRectGetHeight([self cornerViewFrame]), headerClipViewHeight),
|
||||
var verticalScrollerY = MAX(_CGRectGetHeight([self _cornerViewFrame]), headerClipViewHeight),
|
||||
verticalScrollerHeight = _CGRectGetHeight([self bounds]) - verticalScrollerY;
|
||||
|
||||
if (shouldShowHorizontalScroller)
|
||||
@@ -268,7 +265,7 @@
|
||||
|
||||
[_contentView setFrame:contentFrame];
|
||||
[_headerClipView setFrame:headerClipViewFrame];
|
||||
[[self _cornerView] setFrame:[self cornerViewFrame]];
|
||||
[_cornerView setFrame:[self _cornerViewFrame]];
|
||||
|
||||
--_recursionCount;
|
||||
}
|
||||
@@ -423,54 +420,67 @@
|
||||
return _autohidesScrollers;
|
||||
}
|
||||
|
||||
- (void)_updateCornerAndHeaderView
|
||||
{
|
||||
var documentView = [self documentView],
|
||||
currentHeaderView = [self _headerView],
|
||||
documentHeaderView = [documentView respondsToSelector:@selector(headerView)] ? [documentView headerView] : nil;
|
||||
|
||||
if (currentHeaderView !== documentHeaderView)
|
||||
{
|
||||
[currentHeaderView removeFromSuperview];
|
||||
[_headerClipView setDocumentView:documentHeaderView];
|
||||
}
|
||||
|
||||
var documentCornerView = [documentView respondsToSelector:@selector(cornerView)] ? [documentView cornerView] : nil;
|
||||
|
||||
if (_cornerView !== documentCornerView)
|
||||
{
|
||||
[_cornerView removeFromSuperview];
|
||||
|
||||
_cornerView = documentCornerView;
|
||||
|
||||
if (_cornerView)
|
||||
[self addSubview:_cornerView];
|
||||
}
|
||||
|
||||
[self reflectScrolledClipView:_contentView];
|
||||
}
|
||||
|
||||
- (CPView)_headerView
|
||||
{
|
||||
var documentView = [self documentView];
|
||||
|
||||
if ([documentView respondsToSelector:@selector(headerView)])
|
||||
return [documentView headerView];
|
||||
var headerClipViewSubviews = [_headerClipView subviews];
|
||||
|
||||
return nil;
|
||||
return [headerClipViewSubviews count] ? headerClipViewSubviews[0] : nil;
|
||||
}
|
||||
|
||||
- (CPView)_cornerView
|
||||
- (CGRect)_cornerViewFrame
|
||||
{
|
||||
var documentView = [self documentView];
|
||||
|
||||
if ([documentView respondsToSelector:@selector(cornerView)])
|
||||
return [documentView cornerView];
|
||||
}
|
||||
|
||||
- (CGRect)cornerViewFrame
|
||||
{
|
||||
var cornerView = [self _cornerView],
|
||||
cornerBounds = [cornerView bounds],
|
||||
bounds = [self bounds];
|
||||
|
||||
if (!cornerView)
|
||||
if (!_cornerView)
|
||||
return _CGRectMakeZero();
|
||||
|
||||
cornerBounds.origin.x = CGRectGetMaxX(bounds) - CGRectGetWidth(cornerBounds);
|
||||
cornerBounds.origin.y = 0;
|
||||
var bounds = [self bounds],
|
||||
frame = [_cornerView frame];
|
||||
|
||||
return cornerBounds;
|
||||
frame.origin.x = _CGRectGetMaxX(bounds) - _CGRectGetWidth(frame);
|
||||
frame.origin.y = 0;
|
||||
|
||||
return frame;
|
||||
}
|
||||
|
||||
- (CGRect)headerClipViewFrame
|
||||
- (CGRect)_headerClipViewFrame
|
||||
{
|
||||
var headerView = [self _headerView],
|
||||
cornerView = [self _cornerView],
|
||||
bounds = [self bounds];
|
||||
var headerView = [self _headerView];
|
||||
|
||||
if (!headerView)
|
||||
return _CGRectMakeZero();
|
||||
|
||||
bounds.size.height = [headerView bounds].size.height;
|
||||
var frame = [self bounds];
|
||||
|
||||
if (cornerView)
|
||||
bounds.size.width -= CGRectGetWidth([cornerView bounds]);
|
||||
frame.size.height = _CGRectGetHeight([headerView frame]);
|
||||
frame.size.width -= _CGRectGetWidth([self _cornerViewFrame]);
|
||||
|
||||
return bounds;
|
||||
return frame;
|
||||
}
|
||||
|
||||
/* @ignore */
|
||||
|
||||
+27
-2
@@ -666,7 +666,15 @@ CPTableViewSolidHorizontalGridLineMask = 1 << 1;
|
||||
|
||||
- (void)setCornerView:(CPView)aView
|
||||
{
|
||||
if (_cornerView === aView)
|
||||
return;
|
||||
|
||||
_cornerView = aView;
|
||||
|
||||
var scrollView = [[self superview] superview];
|
||||
|
||||
if ([scrollView isKindOfClass:[CPScrollView class]] && [scrollView documentView] === self)
|
||||
[scrollView _updateCornerAndHeaderView];
|
||||
}
|
||||
|
||||
- (CPView)headerView
|
||||
@@ -676,8 +684,23 @@ CPTableViewSolidHorizontalGridLineMask = 1 << 1;
|
||||
|
||||
- (void)setHeaderView:(CPView)aHeaderView
|
||||
{
|
||||
if (_headerView === aHeaderView)
|
||||
return;
|
||||
|
||||
[_headerView setTableView:nil];
|
||||
|
||||
_headerView = aHeaderView;
|
||||
[_headerView setTableView:self];
|
||||
|
||||
if (_headerView)
|
||||
{
|
||||
[_headerView setTableView:self];
|
||||
[_headerView setFrameSize:_CGSizeMake(aSize.width, [_headerView frame].size.height)];
|
||||
}
|
||||
|
||||
var scrollView = [[self superview] superview];
|
||||
|
||||
if ([scrollView isKindOfClass:[CPScrollView class]] && [scrollView documentView] === self)
|
||||
[scrollView _updateCornerAndHeaderView];
|
||||
}
|
||||
|
||||
//Layout Support
|
||||
@@ -1294,7 +1317,9 @@ _cachedDataViews[dataView.identifier].push(dataView);
|
||||
- (void)setFrameSize:(CGSize)aSize
|
||||
{
|
||||
[super setFrameSize:aSize];
|
||||
[_headerView setFrameSize:CGSizeMake(aSize.width, [_headerView frame].size.height)];
|
||||
|
||||
if (_headerView)
|
||||
[_headerView setFrameSize:_CGSizeMake(aSize.width, [_headerView frame].size.height)];
|
||||
}
|
||||
|
||||
- (CGRect)exposedClipRect
|
||||
|
||||
Reference in new issue
Block a user