Xamarin.iOS(以前称为MonoTouch)是适用于Mac OS X和Windows的商业软件开发工具包,可让您使用C#(一种.NET编程语言)为Apple iPhone,iPod Touch,iPad(iOS),Apple创建本机应用程序观看(watchOS)和AppleTV(tvOS)设备。
使用 AttributedText HTML 设置 UILabel 的字体系列
首先,我只想在标签中显示 Html 内容。 Html 简单,例如:一些粗体文本 我是通过以下代码完成的: var 属性 = 新
我正在使用 Xamarin Forms 开发 iPhone 应用程序,从开发和调试到为应用程序商店部署创建存档,一切都工作正常。 当我将 .ipa 上传到应用程序时...
我想限制用户在我的 Xamarin Native iOS 应用程序中截取屏幕截图。 我看过很多链接和代码,但不知何故它对我不起作用。 我按照链接 Restrict
将项目的 Xamarin 表单 IOS 部分设置为启动选项项目后,我收到“UnpackFrameworks”任务意外失败错误
对于上下文,我在 Visual Studio 中打开了我们项目的其他开发者 GitHub 分支。当我将项目启动选项设置为 iOS 并尝试运行它时,我收到了如下所示的错误。我是...
格式化日期时出现ObjectDisposeException NSDate
我有以下方法将 UnixTimestamp 格式化为格式化的日期和时间: 公共字符串 ConvertDateTimeToDeviceShortDateFormat(double unixTimestamp) { 使用 (var dateInNsDate = NSDate.
如何检查用户是否已授予应用程序POST_NOTIFICATIONS权限?
我需要在我的应用程序中知道,该用户在自己的手机>设置>应用程序通知>为此应用程序设置通知。
我想知道用户何时结束在显示条款和条件的 Web 视图上的滚动,以便仅当用户阅读此内容时才显示“接受”按钮。 我想知道用户何时结束在显示条款和条件的 Web 视图上的滚动,以便仅当用户阅读此内容时才显示“接受”按钮。 <StackLayout Spacing="0" BackgroundColor="{StaticResource WhiteColor}"> <CustomView:HeaderView VerticalOptions="Start" LeftImageSource="{Binding LeftImage}" RightImageSource="{Binding RightImage}" LeftCommand="{Binding LeftClickCommand}" RightCommand="{Binding RightClickCommand}" HeaderText="{Binding ScreenTitle}" PrevText="{Localize:ETranslate PrevText}" /> <WebView Source="{Binding Html, Converter={StaticResource HtmlSourceConverter}}" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" /> </StackLayout> public class HtmlSourceConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var html = new HtmlWebViewSource(); if (value != null) { html.Html = value.ToString(); } return html; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } 我尝试使用 Renderer 来实现此目的,但在 iOS WkWebViewRenderer 中没有 WebViewRenderer 中可用的 Scrolled() 方法。 有什么方法可以在 Xamarin.Forms 中实现这一点吗? WKWebView 内部有一个属性 ScrollView,所以我们可以用它覆盖 Delegate。 WKWebViewRenderer 中的代码 [assembly: ExportRenderer(typeof(WebView), typeof(MyRenderer))] namespace FormsA.iOS { public class MyDelegate : UIScrollViewDelegate { public override void Scrolled(UIScrollView scrollView) { if(scrollView.ContentOffset.Y >= scrollView.ContentSize.Height - scrollView.Frame.Size.Height) { //here rearch bottom } else if(scrollView.ContentOffset.Y < scrollView.ContentSize.Height) { } } } public class MyRenderer: WkWebViewRenderer { protected override void OnElementChanged(VisualElementChangedEventArgs e) { base.OnElementChanged(e); this.ScrollView.Delegate = new MyDelegate(); } } } 它在我这边工作得很好,请参阅https://stackoverflow.com/a/52872317/8187800. 我也有 Android 的解决方案。这是完整的解决方案,希望这对寻找相同解决方案的人有帮助! MyPage.xaml <webview:ScrollWebView x:Name="webView" Source="{Binding Html, Converter={StaticResource HtmlSourceConverter}}" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" IsBottomReached="{Binding IsShowAgreeButton}"/> ScrollWebView 控件 public class ScrollWebView : WebView { public static BindableProperty IsBottomReachedProperty = BindableProperty.Create(nameof(IsBottomReached), typeof(bool), typeof(ScrollWebView), default(bool), BindingMode.TwoWay, propertyChanged: null); public bool IsBottomReached { get { return (bool)GetValue(IsBottomReachedProperty); } set { SetValue(IsBottomReachedProperty, value); } } } Android:ScrollWebViewRenderer [assembly: Xamarin.Forms.ExportRenderer(typeof(ScrollWebView), typeof(ScrollWebViewRenderer))] namespace MyApp.Droid { public class ScrollWebViewRenderer : WebViewRenderer { public static ScrollWebView view = null; public ScrollWebViewRenderer(Context context) : base(context) { } protected override void OnElementChanged(ElementChangedEventArgs<WebView> e) { base.OnElementChanged(e); view = (ScrollWebView)Element; if (Control != null) { Control.ScrollChange += Control_ScrollChange; } } private void Control_ScrollChange(object sender, ScrollChangeEventArgs e) { var nativeWebView = e.V as global::Android.Webkit.WebView; int height = (int)Math.Floor(nativeWebView.ContentHeight * nativeWebView.Scale); int webViewheight = nativeWebView.Height; int cutOff = height - webViewheight; if (e.ScrollY >= cutOff) { view.IsBottomReached = true; System.Diagnostics.Debug.WriteLine("Bottom Reached"); } else { view.IsBottomReached = false; } } } } iOS:ScrollWebViewRenderer [assembly: ExportRenderer(typeof(ScrollWebView), typeof(ScrollWebViewRenderer))] namespace MyApp.iOS.RendererClasses { public class ScrollWebViewRenderer : WkWebViewRenderer { public static ScrollWebView view = null; public ScrollWebViewRenderer() { } protected override void OnElementChanged(VisualElementChangedEventArgs e) { base.OnElementChanged(e); view = (ScrollWebView)Element; MyDelegate myDel = new MyDelegate(); myDel.ProcessCompleted += MyDel_ProcessCompleted; this.ScrollView.Delegate = myDel; } private void MyDel_ProcessCompleted(object sender, bool isScrolledToBottom) { view.IsBottomReached = isScrolledToBottom; } } public class MyDelegate : UIScrollViewDelegate { public event EventHandler<bool> ProcessCompleted; public override void Scrolled(UIScrollView scrollView) { if (scrollView.ContentOffset.Y >= scrollView.ContentSize.Height - scrollView.Frame.Size.Height) { System.Diagnostics.Debug.WriteLine("Bottom Reached"); ProcessCompleted?.Invoke(this, true); } else { ProcessCompleted?.Invoke(this, false); } } } } 实现这个答案后,https://stackoverflow.com/a/66931493/15125666我仍然遇到Android渲染器的问题,因为它没有检测到用户何时到达WebView的底部。 为了解决这个问题,您需要在计算中添加一个缓冲区,这将在将内容高度乘以比例时考虑任何潜在的浮点错误。 这里是 Android 的更新代码:ScrollWebViewRenderer private void Control_ScrollChange(object sender, ScrollChangeEventArgs e) { var nativeWebView = e.V as global::Android.Webkit.WebView; int height = (int)(nativeWebView.ContentHeight * nativeWebView.Scale); int webViewheight = nativeWebView.Height; int bottomThreshold = (int)Math.Floor(0.004 * webViewheight); // the number that I used 0.004 was what worked for me. you might need to adjust it for your use case. int cutOff = height - webViewheight - bottomThreshold; if (e.ScrollY >= cutOff) { view.IsBottomReached = true; System.Diagnostics.Debug.WriteLine("Bottom Reached"); } else { view.IsBottomReached = false; } } 这里我添加了一个动态 bottomThreshold 缓冲区,并将其用于 cutOff 计算。它在计算中添加了一个小缓冲区,以确保即使很小的差异也不会妨碍到达底部的检测。
“iOS Xamarin.Forms:更新到 iOS 17.1.1/17.1.2 后滚动 TimePicker 时出现 NSInternalInconsistencyException”
我们的 Xamarin.Forms iOS 应用程序遇到崩溃,并出现特定异常:致命异常:NSInternalInconsistencyException 不得从
“我正在尝试在 Windows 设备上为我使用 Xamarin Forms 开发的 iOS 应用程序设置图标,但我似乎无法做到这一点。我已尝试了所有建议的方法,但它不起作用。我可以吗? ...
Xamarin 项目中的权限访问重复对话框 - 仅在 ios 中
我有一个 Xamarin Prism Forms 应用程序,其中包含应该获取用户当前位置的网页。 该应用程序已拥有 Android 所需的“应用程序”权限。但在ios中,当我打电话时...
Xamarin Forms 适用于 Facebook Audience Network 的 iOS 渲染器
我使用 Xamarin Forms 开发了一个跨平台应用程序,运行良好。现在,我想在应用程序中显示广告,所以我阅读了一些文章并浏览了一些 YouTube 视频 https://www.y...
UniformTypeIdentifiers UTType 始终返回 null
我正在尝试从下载的文件路径获取 Mime 类型。 var fileNanager = new NSFileManager(); if (!fileNanager.FileExists(路径)) { 返回空值; ...
如果我在 VS 2013 中设置 Xamarin.Forms 解决方案并尝试运行 iOS 版本,则会因以下错误而失败: 错误 2 无法解析引用:/Users/Koray/Library/Caches/Xamarin...
使用 maui 在应用程序委托中注册依赖服务后应用程序崩溃了
在将 Xamarin.Forms 迁移到面向 .NET 7 的 .NET Maui 时,我已使用 appdelegate.cs 中的 FinishedLaunching 方法注册了依赖项服务,但是在执行 HttpClient.GetAsync() 时,应用程序
iOS 设备上的 TimePicker 标签中的印地语上午/下午
时间选择器标签以印地语而不是英语显示所选时间 AM/PM。 但它在选择器部分以英文显示 正如在这里可以看到的。 设备语言 英语和 设备...
Xamarin Forms:无法在设备上启动 ios 应用程序
我无法在设备上启动 xamarin.form IOS 应用程序。应用程序可以成功部署,但启动失败。 错误 MT1007:无法在设备上启动应用程序...
我正在使用 Xamarin 编写 iPhone 应用程序。我的 UIViewController 没有填满整个屏幕,上下有间隙。这是模拟器的屏幕截图。我已经换颜色了
Visual Studio 应用程序中心:在 Xamarin iOS 上无法运行的崩溃和错误
在我的 Xamarin iOS 应用程序中,我启用了 AppCenter 的分析和崩溃,具体解释如下:https://learn.microsoft.com/en-us/appcenter/sdk/getting-started/xamarin 分析有效,但我看不到...
无论 .NET MAUI 中绑定的 ObservableRangeCollection 如何更改,列表视图都不会更新
正如标题所说。如果我尝试刷新 RestroomDetailPage.xaml 中绑定到 ObservableRangeCollection 审核的列表视图,它只会卡在活动指示器上,什么也得不到
有没有办法在 VS CODE 而不是 Visual studio 2022 中开发和运行 Xamarin.forms 应用程序? 有人尝试过并成功吗