我将WKWebView放置在y坐标> 0的NSView内。加载页面(无论哪个页面)后,它要么立即切掉顶部,要么显示顶部一秒钟,然后跳下页面(通过执行所以剪掉顶部)。
更重要的是,当我向上滚动时,我可以瞥见顶部,但它会弹回来,不允许我实际滚动到顶部。
未对WKWebView进行任何更改。我注意到的是,y越小,被切除的部分就越小。
WKWebView已通过Interface Builder添加。
如何使WKWebView显示在网站顶部?我正在使用Swift。
这是它的样子:
这是实际网站的外观(请注意可见的导航部分):
答案 0 :(得分:1)
好的,我和你有同样的问题!检查视图的构造框架,如果它不是从0,0开始,请确保父视图不会自动调整子视图的大小。我试图将代码示例保持在最低限度。 (请注意,此示例中不需要webConfig.AllowsAirPlayForMediaPlayback)
这是一个可行的例子。您可以在窗口中将视图切换为全屏视图,或在父视图中将其定位为较小的视图。我在IB中将窗口设置为1024x768。
您可以轻松地将此代码转换为Swift。
关键是不要将子视图的大小自动调整为非0.0的位置。
快速样本:
//#define USE_FULL_WINDOW // uncomment this to fit webview full window
using System;
using AppKit;
using Foundation;
using WebKit;
using CoreGraphics;
using System.Diagnostics;
namespace WkWebTest
{
public class MediaView : NSView
{
private WKWebView webView;
public MediaView(CGRect frame)
: base(frame)
{
#if USE_FULL_WINDOW
this.AutoresizesSubviews = true;
this.AutoresizingMask = NSViewResizingMask.HeightSizable | NSViewResizingMask.WidthSizable;
#endif
WKWebViewConfiguration webConfig = new WKWebViewConfiguration();
webConfig.AllowsAirPlayForMediaPlayback = true;
this.webView = new WKWebView(new CGRect(0, 0, frame.Width, frame.Height), webConfig);
this.webView.AutoresizesSubviews = true;
this.webView.AutoresizingMask = NSViewResizingMask.HeightSizable | NSViewResizingMask.WidthSizable;
this.AddSubview(this.webView);
string url = "http://www.apple.com";
Debug.WriteLine("LoadUrl: " + url);
var request = new NSUrlRequest(new NSUrl(url));
this.webView.LoadRequest(request);
}
public override bool IsFlipped { get { return true; } }
}
public partial class ViewController : NSViewController
{
private MediaView mediaView;
public ViewController(IntPtr handle) : base(handle)
{
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
#if USE_FULL_WINDOW
float mediaViewLeft = 0;
float mediaViewTop = 0;
nfloat mediaViewWidth = View.Frame.Width;
nfloat mediaViewHeight = View.Frame.Height;
#else
float mediaViewLeft = 511;
float mediaViewTop = 112;
nfloat mediaViewWidth = 475;
nfloat mediaViewHeight = 548;
#endif
this.mediaView = new MediaView(new CGRect(mediaViewLeft, mediaViewTop, mediaViewWidth, mediaViewHeight));
this.View.AddSubview(mediaView);
}
// boiler plate code generated by Xamarin
public override NSObject RepresentedObject
{
get
{
return base.RepresentedObject;
}
set
{
base.RepresentedObject = value;
// Update the view, if already loaded.
}
}
}
}