如何调整一个UITableView的tableHeaderView

如何调整一个UITableView的tableHeaderView,第1张

 我碰到了这个问题,我也希望改变的动画,所以我做的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]

}

这实质上是对动画的UITableView的所有不属于类类型调用类的子视图。在动画的最后,它调用setTableHeaderView在父视图(在UITableView中)-如果没有这个的UITableView的内容将跳回到下一个滚动。我对这个迄今为止发现的唯一的限制是,如果试图滚动的UITableView,而动画正在发生,滚动将动画,犹如头视图尚未调整(不是一个大问题,如果动画快) 。

我的需求是:用户使用我的浏览器浏览网页,服务器可以得到我的浏览器名称和版本号,站长工具能查看到客户端来源。OK,解决思路就是修改系统默认的用户代理UserAgent,这是没差的。

曾经做过的App也有这样的需求,思路是在UIWebView 的 Request 的 Header 中设置 UserAgent,最后证实这条思路是行不通的,后来由于时间问题,这个功能就放弃了。如今有个App又有这个需求,看到UC浏览器设置中有个UA设置,让我很是羡慕,果然愿意解决问题的人总是幸运的,再网上找到相关文章。了解大概两种思路,第一种是使用私有API,第二种则是iOS SDK内的。第一种这里就放弃不讲了,只能上第二种实现思路。

// 获取 iOS 默认的 UserAgent,可以很巧妙地创建一个空的UIWebView来获取:

NSString *userAgent = [[[UIWebView alloc] init] stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]

// 获取App名称,我的App有本地化支持,所以是如下的写法

NSString *appName = NSLocalizedStringFromTable(@"CFBundleDisplayName", @"InfoPlist", nil)

// 如果不需要本地化的App名称,可以使用下面这句

// NSString * appName = [[NSBundle mainBundle] infoDictionary][@"CFBundleDisplayName"]

NSString *version = [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"]

NSString *customUserAgent = [userAgent stringByAppendingFormat:@" %@/%@", appName, version]

[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent":customUserAgent}]

// ---------- 随便写个测试代码,记得设置 delegate哦,这只是测试代码

UIWebView *webView = [[UIWebView alloc] init]

webView.delegate = self

[webView loadRequest:[NSURLRequest requestWithURL:[NSURLURLWithString:@"http://www.baidu.com/"]]]

- (void)webViewDidFinishLoad:(UIWebView *)webView

{

NSLog(@"UserAgent = %@", [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"])

}

Xcode 5.1.1 iOS 7.1 模拟器下得到的结果是:

Mozilla/5.0 (iPhoneCPU iPhone OS 7_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) 中华浏览器/1.2.2

title是写在HTML信息里<header/>标签内容。我刚才又查了遍文档,UIWebView与UIWebViewDelegate都没有直接的方法获取〜

但也可以从另外的途径获取到它的Title:

1,可以先获取URL HTML的内容,提取title再用UIWebView的 "– loadHTMLString:baseURL: " 方法加载此页面。

2,每个页面添加上一个JS角本,加载完后,跳转到另一个页面,这个页面的URL加上本页title的信息。用UIWebViewDelegate的"- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType" 方法获取title,返回NO就可以了。

本答案来自于互联网,仅供参考学习作用

如果您对我的回答有不满意的地方,还请您继续追问;

答题不易,互相理解,互相帮助!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7838796.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存