- (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就可以了。
本答案来自于互联网,仅供参考学习作用
如果您对我的回答有不满意的地方,还请您继续追问;
答题不易,互相理解,互相帮助!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)