gpt4 book ai didi

c# - 在滚动表格 View 之前图像不会加载

转载 作者:行者123 更新时间:2023-11-28 20:54:20 25 4
gpt4 key购买 nike

我有 Xamarin.iOS 项目,我在哪里使用 TableView

这里是表格 View 的源代码

 public class ExperienceSourceNew: UITableViewSource
{
private UINavigationController primNav { get; set; }
private UITableView tableView { get; set; }
List<Experience> TableItems;
ExperienceViewControllerNew _owner;
static NSString cellIdentifier = new NSString("newcell_id");
public ExperienceSourceNew(List<Experience> items, ExperienceViewControllerNew owner, UINavigationController nav)
{
TableItems = items;
_owner = owner;
primNav = nav;
}
public override nint RowsInSection(UITableView tableview, nint section)
{

if (TableItems.Count == 0)
{


var noDataLabel = new UILabel
{
Text = "No Experiences at your location at this time. Try to change destination",
TextColor = UIColor.Black,
TextAlignment = UITextAlignment.Center,
LineBreakMode = UILineBreakMode.WordWrap,
Lines = 0
};
tableview.BackgroundView = noDataLabel;
tableview.SeparatorStyle = UITableViewCellSeparatorStyle.None;

return TableItems.Count;
}
else
{
tableview.BackgroundView = null;
tableview.SeparatorStyle = UITableViewCellSeparatorStyle.SingleLine;
return TableItems.Count;
}


}

public override async void RowSelected(UITableView tableView, NSIndexPath indexPath)
{
var selectedExperience = await ExperienceMethods.GetSelectedTour(TableItems[indexPath.Row].id);
if (selectedExperience == "Saved")
{
ExperienceDetailViewController ExperienceDetailController = primNav.Storyboard.InstantiateViewController("ExperienceDetailViewController") as ExperienceDetailViewController;
primNav.PushViewController(ExperienceDetailController, true);

}
else
{
UIAlertController okAlertController = UIAlertController.Create("", "Cannot select this experience", UIAlertControllerStyle.Alert);
okAlertController.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));
}
tableView.DeselectRow(indexPath, true);

}


public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
var cell = (ExperienceCellNew)tableView.DequeueReusableCell(cellIdentifier, indexPath);
Experience item = TableItems[indexPath.Row];
cell.UpdateCell(item);
return cell;
}

我为 TableView 使用自定义 Cell,所以这是它的代码

public ExperienceCellNew (IntPtr handle) : base (handle)
{

}
internal void UpdateCell(Experience experience)
{
var image_url = "https://xplorpal.com/" + experience.cover_image.img_path + "/150x150/" + experience.cover_image.img_file;
ExperienceTitleNew.Text = experience.title;
ExperiencePriceNew.Text = "$" + experience.price;
NSUrlSession session = NSUrlSession.SharedSession;
var dataTask = session.CreateDataTask(new NSUrlRequest(new NSUrl(image_url)), (data, response, error) =>
{
if (response != null)
{
DispatchQueue.MainQueue.DispatchAsync(() =>
{
ExperienceImageNew.Image = UIImage.LoadFromData(data);
});
}
});

dataTask.Resume();
}
}

我的问题是,图像没有出现在 View 加载中,我在标签中有文本,但没有图像。如果我滚动 TableView,图像会出现在单元格中。

哪里会出现问题,如何解决?

最佳答案

具有大量行的 TableView 在给定时间仅显示其总项目的一小部分。 TableView 仅请求正在显示的行的单元格是有效的因此在滚动 TableView 时,单元格得到重新使用并重新填充单元格中的数据。

由于您使用的是下载的图像,因此速度似乎很慢。

您可以尝试在单元格中加载与 ImageView 完全相同大小的图像。

This is similar to your issue

并且还将图像分配给主线程上的 imageview 并使其同步,因为 UI 更改需要同步访问主线程。

关于c# - 在滚动表格 View 之前图像不会加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54277994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com