我使用Xamarin.Forms来加载互联网的网页(客户的要求,请不要评判我),问题是在iOS中网页看起来更大了它是。
我在iOS上没有自定义渲染。
这是在iPhone 6 iOS 11.1.2上的safari上加载的网站
这里加载了webview
MainPage.xaml中
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using Plugin.Connectivity;
using System.ComponentModel;
namespace Juppie
{
public partial class MainPage : ContentPage, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public MainPage()
{
InitializeComponent();
Navegador.Navigating += Navegador_Navigating;
Navegador.Navigated += (sender, e) => { Navegando = false; };
HayInternet = true;
BindingContext = this;
}
bool hayInternet;
public bool HayInternet
{
get
{
return hayInternet;
}
set
{
hayInternet = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("HayInternet"));
EvaluarInternet();
}
}
bool navegando;
public bool Navegando
{
get
{
return navegando;
}
set
{
navegando = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Navegando"));
}
}
public async void EvaluarInternet(){
if (!HayInternet)
{
await DisplayAlert("Aviso","Se requiere conexion a internet para emplear esta aplicacion", "OK");
}
}
protected override void OnAppearing()
{
HayInternet = CrossConnectivity.IsSupported && CrossConnectivity.Current.IsConnected;
CrossConnectivity.Current.ConnectivityChanged += (sender, args) =>
{
HayInternet = args.IsConnected;
};
base.OnAppearing();
}
protected override bool OnBackButtonPressed()
{
if (Navegador.CanGoBack)
{
Navegador.GoBack();
return false;
}
return base.OnBackButtonPressed();
}
void Navegador_Navigating(object sender, WebNavigatingEventArgs e)
{
Navegando = true;
if (e.Url.Contains("/banner"))
{
e.Cancel = true;
var uri = new Uri(e.Url.Replace("/banner", ""));
Device.OpenUri(uri);
}
}
}
}
MainPage.xaml.cs中
WARNING
我尝试使用自定义渲染并设置scalePageToFit = false,但没有成功。 如果有人知道如何解决这个问题,请告诉我。
答案 0 :(得分:3)
Xaml: - VerticalOptions="FillAndExpand"
似乎填充了WebView的HeightRequest和WidthRequest属性规范要求,以便在StackLayout中呈现 - 无论如何它在网格中呈现:
<Grid>
<WebView x:Name="webView"
VerticalOptions="FillAndExpand"
Source="https://www.xamarin.com/"/>
</Grid>
Renderer,ScalesPageToFit默认为false(至少在iPhone SE 11.2的模拟器中)
[assembly: ExportRenderer(typeof(WebView), typeof(MyWebViewRenderer))]
namespace MyNamespace.iOS
{
public class MyWebViewRenderer : WebViewRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
if (NativeView != null && e.NewElement != null)
{
var webView = ((UIWebView)NativeView);
webView.ScalesPageToFit = true;
}
}
}
}
以下屏幕截图来自iPhone SE的模拟器。
ScalesPageToFit = true:
答案 1 :(得分:2)
在我的iPhone 6上测试,该应用程序显示与Safari相同的字体大小。 我还测试了应用程序中字体大小较大的系统字体,它不受应用程序字体大小的影响。 但我确实注意到当活动指示器运行时,我的字体大小变小了,并且在活动指示器消失后它变为正常。
字体大小问题可能是由于Nuget软件包或活动指示器等其他内容的副作用造成的?
您可以尝试使用新的空表单并仅加载Webview来比较差异。
顺便说一句,你的应用程序外观与iPhone非常相似,并启用了显示缩放功能。
开启显示缩放前:
打开显示缩放后:
答案 2 :(得分:1)
是否可能会通过iPhone的可访问性设置覆盖大小调整?
请参阅设置 - 应用 - &gt;一般 - &gt;可访问性 - &gt;更大的文字
(从德语自由翻译,实际菜单条目可能被命名为不同)
答案 3 :(得分:0)
我遇到了同样的问题。
在Xamarin.Forms App解析基于Launch屏幕。如果您正在使用Assets(LaunchImage)启动屏幕。然后根据LaunchImage设置您的应用分辨率。
最佳解决方案是:使用storyboard(LaunchScreen.storyboard)或XIB for Launch屏幕。这可以改善您的App UI。喜欢字体大小和应用分辨率