我试图用Xamarin Forms创建一个简单的listView。 listView在android中运行,但是在iOS上我得到一个bugg,其中的内容错过了单元格。请参阅下面的图片和代码:
这是我的代码:
页
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;
}
我做错了什么?
答案 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);