我有一个webview,可以根据需要滚动导航栏。
但是,当我第一次加载控制器时,滚动webview中加载的页面,使其与导航栏的顶部对齐。当我滚动网页视图时,顶部存在正确的插图以正确放置,这只是初始位置不正确。
如何让初始位置完全滚动到顶部,包括插图?
答案 0 :(得分:13)
如果您不介意使用不透明的导航栏,那么最简单的解决方案可能是在包含您的Web视图的视图控制器中执行此操作:
self.navigationController.navigationBar.translucent = NO;
框架的定位将采用与iOS6相同的行为,神奇地!
答案 1 :(得分:6)
Rick的回答是正确的,除了最高值应为负值,这对我有用!
[self.webView.scrollView setContentInset:UIEdgeInsetsMake(-44, 0, 0, 0)];
[self.webView.scrollView setScrollIndicatorInsets:UIEdgeInsetsMake(-44, 0, 0, 0)];
[self.webView.scrollView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];
我使用-44,如果顶部没有状态栏,则应使用-64。
答案 2 :(得分:4)
我解决此问题的方法是使用webViewDidFinishLoad委托回调。在Web视图的回调方法中,我设置了所有工作,使Web视图的滚动视图看起来正确。
[webView.scrollView setContentInset:UIEdgeInsetsMake(64, 0, 0, 0)];
[webView.scrollView setScrollIndicatorInsets:UIEdgeInsetsMake(64, 0, 0, 0)];
[webView.scrollView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];
答案 3 :(得分:3)
我有同样的问题并修复了它。解决方案非常简单:
转到故事板,选择包含UIWebView的视图控制器并打开Attributes Inspector。在这里,你会看到标题“Extend Edges”,只需取消选中“Under Top Bars”框,我就可以了!
希望这有帮助!
答案 4 :(得分:1)
使用以下
CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
CGFloat navHeight = self.navigationController.navigationBar.frame.size.height;
applicationFrame.origin.y = navHeight + 4;
webView = [[UIWebView alloc] initWithFrame:applicationFrame];
答案 5 :(得分:1)
您还可以在viewDidAppear:
中设置webview的滚动视图的内容偏移量,例如:
[self.webView.scrollView setContentOffset:CGPointMake(0, -64) animated:NO];
不幸的是,如果放在viewWillAppear:
中,它就没有效果,所以当视图出现时,当内容从导航栏下方移动到新位置时,您会看到内容中的可见跳转。
答案 6 :(得分:0)
我的解决方案:
- (void)loadView {
...
_offsetSet = NO;
}
- (void) viewDidLayoutSubviews {
if (!_offsetSet) {
[_webView.scrollView setContentOffset:CGPointMake(0, -self.topLayoutGuide.length) animated:NO];
}
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
_offsetSet = YES;
}
答案 7 :(得分:0)
对于@ Puran的答案的更一般版本,而不是44或64的硬连线,从topLayoutGuide获取它。此外,如果您多次加载,则只需更改一次这些值:
UIEdgeInsets insets = self.myWebView.scrollView.contentInset;
if ( UIEdgeInsetsEqualToEdgeInsets(insets, UIEdgeInsetsZero)) {
insets.top = -self.topLayoutGuide.length;
[self.myWebView.scrollView setContentInset:insets];
[self.myWebView.scrollView setScrollIndicatorInsets:insets];
[self.myWebView.scrollView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];
}