我正在使用\nXamarin.Froms:5.0.0.24125\nXcode 版本:13.0 (13A233)\nVisual Studio for Mac 社区版本 8.10.9(构建 3)\nNuGet 版本:5.9.0.7134\nXamarin.iOS 版本:14.20。 0.27(Visual Studio 社区)
\n主页.xaml:
\n<?xml version="1.0" encoding="utf-8" ?>\n<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"\n xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"\n x:Class="ListViewTopSpace.MainPage"\n xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"\n Title="Page title"\n ios:Page.UseSafeArea="true">\n <ListView ItemsSource="{Binding Users}"\n BackgroundColor="Blue"\n HasUnevenRows="True">\n <ListView.ItemTemplate>\n <DataTemplate>\n <ViewCell>\n <StackLayout Margin="0,0,0,0.5"\n Padding="10,0"\n BackgroundColor="AliceBlue">\n <Label FontSize="12">\n <Label.FormattedText>\n <FormattedString>\n <Span Text="User Id: "\n FontAttributes="Bold"/>\n <Span Text="{Binding Id, Mode=OneWay}"/>\n </FormattedString>\n </Label.FormattedText>\n </Label>\n <Label FontSize="12">\n <Label.FormattedText>\n <FormattedString>\n <Span Text="User name: "\n FontAttributes="Bold"/>\n <Span Text="{Binding Name, Mode=OneWay}"/>\n </FormattedString>\n </Label.FormattedText>\n </Label>\n </StackLayout>\n </ViewCell>\n </DataTemplate>\n </ListView.ItemTemplate>\n </ListView>\n</ContentPage>\nRun Code Online (Sandbox Code Playgroud)\nMainPageViewModel.cs
\nusing System;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\n\nnamespace ListViewTopSpace\n{\n public class MainPageViewModel : ObservableProperty\n {\n public MainPageViewModel()\n {\n Users = new ObservableCollection<UserListModel>()\n {\n new UserListModel { Id = 1, Name = "User 1" },\n new UserListModel { Id = 2, Name = "Test user 1" },\n new UserListModel { Id = 3, Name = "User 2" },\n new UserListModel { Id = 4, Name = "Test user 2" },\n };\n }\n\n private ObservableCollection<UserListModel> _users;\n public ObservableCollection<UserListModel> Users\n {\n get { return _users; }\n set\n {\n _users = value;\n OnPropertyChanged(nameof(Users));\n }\n }\n }\n\n public class UserListModel\n {\n public int Id { get; set; }\n public string Name { get; set; }\n }\n\n public class ObservableProperty : INotifyPropertyChanged\n {\n public event PropertyChangedEventHandler PropertyChanged;\n\n protected void OnPropertyChanged(string propertyName)\n {\n var handler = PropertyChanged;\n if (handler != null)\n handler(this, new PropertyChangedEventArgs(propertyName));\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n结果:\n[1]: https://i.stack.imgur.com/BKn29.png \n这个突出显示的空间不应该存在\xe2\x80\x99。
\n小智 13
@Colex是对的,但你必须替换这串代码:
Control.TableHeaderView = new UIKit.UIView(frame: new CoreGraphics.CGRect(0, 0, 0, float.MinValue));
Run Code Online (Sandbox Code Playgroud)
有了这个:
Control.SectionHeaderTopPadding = new nfloat(0);
Run Code Online (Sandbox Code Playgroud)
渲染器完整代码:
[assembly: ExportRenderer(typeof(ListView), typeof(LVRenderer))]
namespace YourNameSpace.iOS
{
public class LVRenderer : ListViewRenderer
{
public LVRenderer()
{
}
protected override void OnElementChanged(ElementChangedEventArgs<ListView> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.SectionHeaderTopPadding = new nfloat(0);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
该问题与苹果有关,而不是 xamarin 方面。
请参阅此线程:https ://developer.apple.com/forums/thread/683980 。
为了解决这个问题,我们可以为 ListView 添加自定义渲染器
尝试下面的代码
[assembly:ExportRenderer(typeof(ListView),typeof(MyRenderer))]
namespace Formssss.iOS
{
public class MyRenderer : ListViewRenderer
{
public MyRenderer()
{
}
protected override void OnElementChanged(ElementChangedEventArgs<ListView> e)
{
base.OnElementChanged(e);
if(Control != null)
{
Control.TableHeaderView = new UIKit.UIView(frame: new CoreGraphics.CGRect(0, 0, 0, float.MinValue));
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2296 次 |
| 最近记录: |