Xamarin.Forms: Относительный макет внутри Грид-макета не работает должным образом - PullRequest
0 голосов
/ 13 февраля 2019

Я хочу создать динамический макет сетки с одной строкой из 2 столбцов и другой строкой только с одним столбцом с colspan 2. И каждый столбец может содержать наложенное изображение в верхнем правом углу.Для этого я попытался добавить относительное расположение в сетке, но проблема в том, что тег изображения в относительном размещении не занимает всю ширину.код для создания относительного макета

for (int i = 0; i < temp.Count; i++)
        {
            var data = temp[i];
            var framelyt = new Frame { CornerRadius = 4, IsClippedToBounds = true, HasShadow = false, Padding = 0, HorizontalOptions = LayoutOptions.FillAndExpand, VerticalOptions = LayoutOptions.FillAndExpand };

            Image imageStack = new Image { Source = "placeholder_image1", Margin = 0, Aspect = Aspect.Fill, HorizontalOptions = LayoutOptions.FillAndExpand };
             Image cmpltimageStack = new Image { Source = "completed_icon", Aspect = Aspect.Fill, HeightRequest = 32, IsVisible=true };
            RelativeLayout relativeLayout = new RelativeLayout { HorizontalOptions = LayoutOptions.FillAndExpand, VerticalOptions = LayoutOptions.FillAndExpand, BackgroundColor = Color.Beige };
            framelyt.Content = imageStack;
            relativeLayout.Children.Add(framelyt, Constraint.RelativeToParent((parent) =>
            {
                return parent.Width;             
                }), Constraint.Constant(0));      relativeLayout.Children.Add(cmpltimageStack,
            Constraint.RelativeToParent((parent) =>
            {
               return parent.Width - 50;
            }),
            Constraint.Constant(0));
            gridStckActivity.Children.Add(relativeLayout, column, row);

            if (column == 1)
            {
                    column = 0;
                    isSingle = true;
                row++;
            }
            else
            {

                column = 1;
            }}

Заранее спасибо.

1 Ответ

0 голосов
/ 19 февраля 2019

Это работало на устройстве Android должным образом, но на iOS оставляло место на правой панели.После добавления x, y и ограничения ширины он работал правильно на обоих устройствах.Вот исправленный код.

for (int i = 0; i < temp.Count; i++)
        {
            var data = temp[i];
            var framelyt = new Frame { CornerRadius = 4, IsClippedToBounds = true, HasShadow = false, Padding = 0, HorizontalOptions = LayoutOptions.FillAndExpand, VerticalOptions = LayoutOptions.FillAndExpand };

        Image imageStack = new Image { Source = "placeholder_image1", Margin = 0, Aspect = Aspect.Fill, HorizontalOptions = LayoutOptions.FillAndExpand };
         Image cmpltimageStack = new Image { Source = "completed_icon", Aspect = Aspect.Fill, HeightRequest = 32, IsVisible=true };
        RelativeLayout relativeLayout = new RelativeLayout { HorizontalOptions = LayoutOptions.FillAndExpand, VerticalOptions = LayoutOptions.FillAndExpand, BackgroundColor = Color.Beige };
        framelyt.Content = imageStack;
        relativeLayout.Children.Add(framelyt, Constraint.Constant(0), Constraint.Constant(0),Constraint.RelativeToParent((parent) =>
            {
                return parent.Width;
            }));                    


relativeLayout.Children.Add(cmpltimageStack,
            Constraint.RelativeToParent((parent) =>
            {
               return parent.Width - 50;
            }),
            Constraint.Constant(0));
            gridStckActivity.Children.Add(relativeLayout, column, row);
        if (column == 1)
        {
                column = 0;
                isSingle = true;
            row++;
        }
        else
        {

            column = 1;
        }  }
...