swift - macOS 上的 WKWebView 截断顶部
问题描述
我在 NSView 中放置了一个 WKWebView,y 坐标 > 0。加载页面(无论是哪个页面)后,它要么立即切断顶部,要么显示顶部一秒钟,然后跳下页面(通过这样做切断顶端)。
更重要的是,当我向上滚动时,我瞥见了顶部,但它反弹回来,不允许我真正滚动到顶部。
没有对 WKWebView 进行任何更改。我注意到的是,y 越小,被切断的部分就越小。
WKWebView 已通过 Interface Builder 添加。
如何让 WKWebView 显示在网站顶部?我正在使用斯威夫特。
这是它的样子:
这是实际网站的样子(注意可见的导航部分):
解决方案
好的,我遇到了和你一样的问题!检查视图的构造框架,如果它不是从 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.
}
}
}
}
推荐阅读
- java - 当我尝试使用 Jsoup 在课堂上获取超过 1 个文档时,为什么会出现 handshake_failure 错误?
- python - DRF 中的 CART 功能
- python-3.x - 如何使用正则表达式计算文本文件中出现的所有短语?
- openmdao - 轨迹中链接的 OpenMDAO 阶段是否需要具有相同的转录?
- java - 使用 JAXB XMLStreamReader 防止 XXE 攻击
- python - Sympy Linsolve 出乎意料的结果
- java - Launch4j 不显示 UTF-8 字符
- javascript - 如何在输入字段中写入值帮助数据?
- scala - IntelliJ IDEA 2020.3 Scala 插件不适用于新项目
- azure - 使用 Powershell 跟踪 Azure Blob 容器日志