使用Xamarin.Forms和Zxing生成QR码

11

我在网上看到了很多相关内容(旧帖子),但似乎没有什么能解决我的问题。我正在尝试将一个字符串生成二维码并在应用程序中显示。

以下是我最初的代码:

qrCode = new ZXingBarcodeImageView
{
    BarcodeFormat = BarcodeFormat.QR_CODE,
    BarcodeOptions = new QrCodeEncodingOptions
    {
        Height  = 50,
        Width   = 50
    },
    BarcodeValue = codeValue,
    VerticalOptions = LayoutOptions.CenterAndExpand,
    HorizontalOptions = LayoutOptions.CenterAndExpand
};

这对于Android设备没问题,但在IOS设备上根本没有渲染。因此,在进行研究后,我尝试像这样做:

Image qrCode;

if (Device.OS == TargetPlatform.iOS)
{
    var writer = new BarcodeWriter
    {
        Format = BarcodeFormat.QR_CODE,
        Options = new ZXing.Common.EncodingOptions
        {
            Width = 50,
            Height = 50
        }
    };

    var b = writer.Write(codeValue);

    qrCode = new Image
    {
        Aspect = Aspect.AspectFill,
        VerticalOptions = LayoutOptions.CenterAndExpand,
        HorizontalOptions = LayoutOptions.CenterAndExpand,
        Source = ImageSource.FromStream(() =>
        {
            MemoryStream ms = new MemoryStream(b);
            ms.Position = 0;
            return ms;
        })
    };

}else{
    qrCode = new ZXingBarcodeImageView
    {
        BarcodeFormat = BarcodeFormat.QR_CODE,
        BarcodeOptions = new QrCodeEncodingOptions
        {
            Height  = 50,
            Width   = 50
        },
        BarcodeValue = codeValue,
        VerticalOptions = LayoutOptions.CenterAndExpand,
        HorizontalOptions = LayoutOptions.CenterAndExpand
    };
}

Content = new StackLayout
{
    Children = {
        header, lblExplenationText, qrCode
    },
    BackgroundColor = Color.White
};

但是仍然没有任何渲染出来。

ZXing.Mobile.Forms NuGet包版本:2.1.47(最新版)


你找到解决方案了吗?如果没有,我可以帮助你开始一个赏金。 - knocte
2个回答

11

看起来这是一个已知的问题
幸运的是有一个解决方法,设置HeightRequestWidthRequest,下面是一个有效的代码示例:

ZXingBarcodeImageView GenerateQR(string codeValue)
{
    var qrCode = new ZXingBarcodeImageView
    {
        BarcodeFormat = BarcodeFormat.QR_CODE,
        BarcodeOptions = new QrCodeEncodingOptions
        {
            Height = 350,
            Width = 350
        },
        BarcodeValue = codeValue,
        VerticalOptions = LayoutOptions.CenterAndExpand,
        HorizontalOptions = LayoutOptions.CenterAndExpand
    };
    // Workaround for iOS
    qrCode.WidthRequest = 350;
    qrCode.HeightRequest = 350;
    return qrCode;
}

如何在20秒后使QR码过期? - R15

0
在应用程序委托中添加以下代码: ZXing.Net.Mobile.Forms.iOS.Platform.Init(); 在LoadApplication(new App());之前。
准备好了...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接