Xamarin Forms ListView не работает должным образом на ios

Я пытаюсь создать простой listView с Xamarin Forms. ListView работает в Android, но на iOS я получаю ошибку, когда содержимое не помещается в ячейках. Смотрите мое изображение и код ниже:

введите здесь описание изображения

Это мой код:

Страница

public class TablePage
{
    public static Page GetTablePage ()
    {
        //Get NewsItems to populate listView
        var NewsItemList = DataAccessLayer.GetNewsItemList ();

        ListView listView = new ListView {
            ItemsSource = NewsItemList,
            ItemTemplate = new DataTemplate (typeof(NewsCell))
        };

        return new ContentPage { 
            Content = new StackLayout {
                Children = {
                    listView
                }
            },
            Title = "Table",
        };
    }
}

Клетка:

public class NewsCell : ViewCell
    {
        public NewsCell ()
        {
            var headerLabel = new Label();
            var contentLabel = new Label();

            headerLabel.SetBinding(Label.TextProperty, "header");
            contentLabel.SetBinding(Label.TextProperty, "content");

            var s = new StackLayout();
            s.Padding = 20;
            s.Children.Add(headerLabel);
            s.Children.Add(contentLabel);

            this.View = s;
        }
    }

DataAccessLayer для элементов:

public static List<NewsItem> GetNewsItemList()
{
    List<NewsItem> NewsItemList = new List<NewsItem> ();
    NewsItemList.Add(new NewsItem { header = "News1", content = "content1"});
    NewsItemList.Add(new NewsItem { header = "News2", content = "content2"});
    NewsItemList.Add(new NewsItem { header = "News3", content = "content3"});
    NewsItemList.Add(new NewsItem { header = "News4", content = "content4"});
    return NewsItemList;
}

Что я делаю не так?


person Lord Vermillion    schedule 14.08.2014    source источник
comment
Я бы порекомендовал уменьшить Padding на StackLayout — либо так, либо увеличить RowHeight на ListView, чтобы вместить все это Padding.   -  person rwisch45    schedule 14.08.2014


Ответы (1)


Проблема здесь в том, что отступ, который вы использовали, составляет 20 пикселей, что слишком велико.

Взгляните на эту статью, чтобы узнать, что такое заполнение — это пространство между вашим контейнерным элементом и пространством, где расположены дочерние элементы.

В этом случае вы ставите 20 пикселей с каждой стороны, поэтому headerLabel начинается на 20 пикселей ниже верха, занимает примерно 20 пикселей, а contentLabel начинается под ним. В то же время ListView по-прежнему имеет высоту строки по умолчанию, выглядит примерно как 42 пикселя, поэтому contentLabel начинается со смещения 40 пикселей и, следовательно, над следующей ячейкой.

Вы можете изменить Padding на s.Padding = new Thickness(20,2,20,2);, чтобы получить по 20 пикселей слева и справа, но только по 2 пикселя сверху и снизу.


Вы также заметите, что ваш ListView начинается с верхней части экрана, а панель iOS закрывает часть содержимого. Чтобы исправить это, примените аналогичный трюк с отступами к самой странице контента:

if (Device.OS == TargetPlatform.iOS)
    this.Padding = new Thickness (0, 20, 0, 0);
person Sten Petrov    schedule 14.08.2014