0

我正在尝试使用以下代码在 Xamarin 表单中生成和显示条形码。

barcode = new ZXingBarcodeImageView
{
    HeightRequest = 400,
    WidthRequest = 400
};
barcode.BarcodeFormat = ZXing.BarcodeFormat.QR_CODE;
barcode.BarcodeOptions.Width = 400;
barcode.BarcodeOptions.Height = 400;
barcode.BarcodeOptions.Margin = 10;
barcode.BarcodeValue = "ZXing.Net.Mobile";

Content = barcode;

QR 码在 Android 虚拟设备中呈现良好。另一方面,在 iOS 设备中,会呈现扭曲的二维码。在 iOS 虚拟设备上呈现的 QR 码的纵横比并不像预期的那样是正方形的。

Android虚拟设备上呈现的二维码是通过手机验证的。

编辑: 按照@wilson 的建议尝试了以下代码

        try
        {
            barcode = new ZXingBarcodeImageView
            {
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
            };
            barcode.BarcodeFormat = ZXing.BarcodeFormat.QR_CODE;
            barcode.BarcodeOptions.Width = 500;
            barcode.BarcodeOptions.Height = 500;
            barcode.BarcodeOptions.Margin = 10;
            barcode.BarcodeValue = "ZXing.Net.Mobile";

            Content = barcode;

        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine(ex.ToString());
        }

不过,我看到了同样的问题。当我尝试@wilson 的示例代码时,它在 iPhone 模拟器上运行良好。可能我应该按照建议使用内容视图。

编辑 2 我尝试了堆栈布局,如下所示。

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:AZCommute"
             x:Class="AZCommute.MainPage">
    <StackLayout HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand">
        <Label Text="QR Code Generator" HorizontalOptions="Center"/>
        <local:QRResult x:Name="qrResult"/>
    </StackLayout>
</ContentPage>

但是,没有任何帮助。在 iOS 上没有呈现任何内容。我尝试在初始化时添加WidthRequest和,如下所示。HeightRequestZXingBarcodeImageView

HorizontalOptions = LayoutOptions.Fill,
VerticalOptions = LayoutOptions.Fill,
WidthRequest = 410,
HeightRequest = 410,

现在,ZXingBarcodeImageView在 iPhone 模拟器中渲染。但是,纵横比丢失了(高度 > 宽度)。 注意:我正在使用ContentViewwithStackLayout

4

2 回答 2

0

尝试像这样分配 Horizo​​ntalOptions 属性:

barcode = new ZXingBarcodeImageView
{
    HorizontalOptions = LayoutOptions.FillAndExpand,
    VerticalOptions = LayoutOptions.FillAndExpand,
};
barcode.BarcodeFormat = ZXing.BarcodeFormat.QR_CODE;
barcode.BarcodeOptions.Width = 500;
barcode.BarcodeOptions.Height = 500;
barcode.BarcodeValue = contentEntry.Text.Trim();
Content = barcode;

或者尝试创建一个ContentView以显示 QRCode。

有关更多信息,请参阅我的示例

于 2017-09-28T18:06:37.583 回答
0

尝试放入 StackLayout :)

        barcode = new ZXingBarcodeImageView
        {
            HorizontalOptions = LayoutOptions.FillAndExpand,
            VerticalOptions = LayoutOptions.FillAndExpand,
        };

        barcode.BarcodeFormat = ZXing.BarcodeFormat.QR_CODE;
        barcode.BarcodeOptions.Width = 500;
        barcode.BarcodeOptions.Height = 500;
        barcode.BarcodeOptions.Margin = 10;
        barcode.BarcodeValue = "ZXing.Net.Mobile";

        Content = new StackLayout{
        HorizontalOptions = LayoutOptions.CenterAndExpand,
            VerticalOptions = LayoutOptions.CenterAndExpand,

            Children = {
            barcode
            }
        };
于 2017-09-29T11:49:31.540 回答