Xamarin Forms ListView在ios上无法正常工作

时间:2014-08-14 07:45:53

标签: listview xamarin xamarin.forms

我试图用Xamarin Forms创建一个简单的listView。 listView在android中运行,但是在iOS上我得到一个bugg,其中的内容错过了单元格。请参阅下面的图片和代码:

enter image description here

这是我的代码:

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;
}

我做错了什么?

1 个答案:

答案 0 :(得分:3)

这里的问题是你使用的填充是20px,太大了。

查看this article以了解Padding是什么 - 它是容器元素与子元素布局空间之间的空间。

在这种情况下,您需要在任意一侧放置20px,因此headerLabel开始低于顶部20px,类似于20px本身,contentLabel从此开始。同时,ListView仍然具有默认的行高,看起来像42px左右,因此contentLabel从偏移40px开始,因此在下一个单元格上。

您可以将您的填充更改为s.Padding = new Thickness(20,2,20,2);,这样您就可以左右两次获得20px,但在顶部和底部只能获得2个。


您还会注意到,ListView从屏幕顶部开始,iOS栏覆盖了部分内容。要解决此问题,请在内容页面中应用类似的填充技巧:

if (Device.OS == TargetPlatform.iOS)
    this.Padding = new Thickness (0, 20, 0, 0);