iMe*_*iMe 100 iphone cocoa-touch uitableview
我无法调整tableHeaderView的大小.它简单不起作用.
1)创建UITableView和UIView(100 x 320 px);
2)将UIView设置为UITableView的tableHeaderView;
3)建立和去.一切都好.
现在,我想调整tableHeaderView的大小,所以我在viewDidLoad中添加了这段代码:
self.tableView.autoresizesSubviews = YES;
self.tableView.tableHeaderView = myHeaderView;
self.tableView.tableFooterView = myFooterView;
CGRect newFrame = self.tableView.tableHeaderView.frame;
newFrame.size.height = newFrame.size.height + 100;
self.tableView.tableHeaderView.frame = newFrame;
Run Code Online (Sandbox Code Playgroud)
tableHeaderView的高度应显示为200,但显示为100.
如果我写:
self.tableView.autoresizesSubviews = YES;
CGRect newFrame = myHeaderView.frame;
newFrame.size.height = newFrame.size.height + 100;
myHeaderView.frame = newFrame;
self.tableView.tableHeaderView = myHeaderView;
self.tableView.tableFooterView = myFooterView;
Run Code Online (Sandbox Code Playgroud)
然后它按照我想要的200高度开始.但我希望能够在运行时修改它.
我也试过这个,没有成功:
self.tableView.autoresizesSubviews = YES;
self.tableView.tableHeaderView = myHeaderView;
self.tableView.tableFooterView = myFooterView;
CGRect newFrame = self.tableView.tableHeaderView.frame;
newFrame.size.height = newFrame.size.height + 100;
self.tableView.tableHeaderView.frame = newFrame;
[self.tableView.tableHeaderView setNeedsLayout];
[self.tableView.tableHeaderView setNeedsDisplay];
[self.tableView setNeedsLayout];
[self.tableView setNeedsDisplay];
Run Code Online (Sandbox Code Playgroud)
这里的要点是:我们如何在运行时调整tableHeaderView的大小?
有人能够这样做吗?
谢谢
我
kub*_*ubi 180
仅供参考:我通过修改tableHeaderView并重新设置它来实现这一点.在这种情况下,当UIWebView子视图完成加载时,我正在调整tableHeaderView的大小.
[webView sizeToFit];
CGRect newFrame = headerView.frame;
newFrame.size.height = newFrame.size.height + webView.frame.size.height;
headerView.frame = newFrame;
[self.tableView setTableHeaderView:headerView];
Run Code Online (Sandbox Code Playgroud)
gar*_*oon 12
这个答案很老,显然不适用于iOS 7及更高版本.
我遇到了同样的问题,我也希望更改动画,所以我为我的标题视图创建了UIView的子类并添加了这些方法:
- (void)adjustTableHeaderHeight:(NSUInteger)newHeight{
NSUInteger oldHeight = self.frame.size.height;
NSInteger originChange = oldHeight - newHeight;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0f];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
self.frame = CGRectMake(self.frame.origin.x,
self.frame.origin.y,
self.frame.size.width,
newHeight);
for (UIView *view in [(UITableView *)self.superview subviews]) {
if ([view isKindOfClass:[self class]]) {
continue;
}
view.frame = CGRectMake(view.frame.origin.x,
view.frame.origin.y - originChange,
view.frame.size.width,
view.frame.size.height);
}
[UIView commitAnimations];
}
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context{
[(UITableView *)self.superview setTableHeaderView:self];
}
Run Code Online (Sandbox Code Playgroud)
这基本上为UITableView的所有子视图设置了动画,这些子视图与调用类的类类型不同.在动画结束时,它在superview(UITableView)上调用setTableHeaderView - 如果没有这个,UITableView内容将在用户下次滚动时跳回.到目前为止,我发现的唯一限制是,如果用户在动画发生时尝试滚动UITableView,滚动将动画,好像标题视图尚未调整大小(如果动画是动画,则不是很重要)快).
Bes*_*esi 10
如果要有条件地为更改设置动画,可以执行以下操作:
- (void) showHeader:(BOOL)show animated:(BOOL)animated{
CGRect closedFrame = CGRectMake(0, 0, self.view.frame.size.width, 0);
CGRect newFrame = show?self.initialFrame:closedFrame;
if(animated){
// The UIView animation block handles the animation of our header view
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
// beginUpdates and endUpdates trigger the animation of our cells
[self.tableView beginUpdates];
}
self.headerView.frame = newFrame;
[self.tableView setTableHeaderView:self.headerView];
if(animated){
[self.tableView endUpdates];
[UIView commitAnimations];
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,动画是双折的:
tableHeaderView
.这是使用beginUpdates
和完成的endUpdates
UIView
动画块完成的.为了同步这两个动画animationCurve
必须设置为UIViewAnimationCurveEaseInOut
和持续时间0.3
,这似乎是UITableView用于它的动画.
我在gihub上创建了一个Xcode项目,它就是这样做的.退房项目ResizeTableHeaderViewAnimated
中BESI/IOS-快速问答
我认为如果你只设置myHeaderView的高度就可以了:
CGRect newFrame = myHeaderView.frame;
newFrame.size.height = newFrame.size.height + 100;
myHeaderView.frame = newFrame;
self.tableView.tableHeaderView = myHeaderView;
Run Code Online (Sandbox Code Playgroud)
使用@garrettmoon解决方案直到iOS 7.
这是基于@ garrettmoon的更新解决方案:
- (void)adjustTableHeaderHeight:(NSUInteger)newHeight animated:(BOOL)animated {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:[CATransaction animationDuration]];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
self.frame = CGRectMake(self.frame.origin.x,
self.frame.origin.y,
self.frame.size.width,
newHeight);
[(UITableView *)self.superview setTableHeaderView:self];
[UIView commitAnimations];
}
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context{
[(UITableView *)self.superview setTableHeaderView:self];
}
Run Code Online (Sandbox Code Playgroud)
这在iOS 7和8上适用于我.此代码在表视图控制器上运行.
[UIView animateWithDuration:0.3 animations:^{
CGRect oldFrame = self.headerView.frame;
self.headerView.frame = CGRectMake(oldFrame.origin.x, oldFrame.origin.y, oldFrame.size.width, newHeight);
[self.tableView setTableHeaderView:self.headerView];
}];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
87480 次 |
最近记录: |