图像仅在滚动 TableView 后出现
Image appears only after scroll TableView
我有带有多个文本字段和图像的 TableView。对于图像加载,我使用 SDWebImage 库。
这是 TableView 的源代码
public class ExperienceSource : UITableViewSource
{
//UINavigationController instance, to pass it to constructor
private UINavigationController primNav { get; set; }
private UITableView tableView { get; set; }
List<Experience> TableItems;
ExperienceTableViewController owner;
public ExperienceSource(List<Experience> items,ExperienceTableViewController owner, UINavigationController nav)
{
TableItems = items;
this.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 = tableView.DequeueReusableCell("cell_id", indexPath) as ExperienceCell;
Experience item = TableItems[indexPath.Row];
cell.UpdateCell(item);
return cell;
}
}
这是 CustomCell 的代码
public partial class ExperienceCell : UITableViewCell
{
UIImage picture;
public ExperienceCell (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;
/*using (var url = new NSUrl(image_url))
using (var data = NSData.FromUrl(url))
picture = UIImage.LoadFromData(data);
ExperienceImage.Image = picture;*/
ExperienceImage.SetImage(NSUrl.FromString(image_url),
UIImage.FromBundle("placeholder"),
SDWebImageOptions.RefreshCached);
ExperienceTitle.Text = experience.title;
ExperiencePrice.Text = "$" + experience.price;
}
}
我的问题是,图像仅在滚动后才会出现在 UIImage 中,或者转到另一个 ViewController 之后,返回。
如果我使用注释代码与 NSUrl
等。没关系。
我的问题在哪里?为什么我使用 SDWebImage 时没有显示图像?
感谢您的帮助。
Table 具有大量行的视图仅显示给定 time.It 的总项目的一小部分 table 视图仅要求单元格正在显示的行
因此,在滚动 table 视图时,将重新使用单元格并重新填充单元格中的数据。
由于您使用的是下载的图像,因此速度似乎很慢。
您可以尝试在单元格中加载与图像视图完全相同大小的图像。
我有带有多个文本字段和图像的 TableView。对于图像加载,我使用 SDWebImage 库。
这是 TableView 的源代码
public class ExperienceSource : UITableViewSource
{
//UINavigationController instance, to pass it to constructor
private UINavigationController primNav { get; set; }
private UITableView tableView { get; set; }
List<Experience> TableItems;
ExperienceTableViewController owner;
public ExperienceSource(List<Experience> items,ExperienceTableViewController owner, UINavigationController nav)
{
TableItems = items;
this.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 = tableView.DequeueReusableCell("cell_id", indexPath) as ExperienceCell;
Experience item = TableItems[indexPath.Row];
cell.UpdateCell(item);
return cell;
}
}
这是 CustomCell 的代码
public partial class ExperienceCell : UITableViewCell
{
UIImage picture;
public ExperienceCell (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;
/*using (var url = new NSUrl(image_url))
using (var data = NSData.FromUrl(url))
picture = UIImage.LoadFromData(data);
ExperienceImage.Image = picture;*/
ExperienceImage.SetImage(NSUrl.FromString(image_url),
UIImage.FromBundle("placeholder"),
SDWebImageOptions.RefreshCached);
ExperienceTitle.Text = experience.title;
ExperiencePrice.Text = "$" + experience.price;
}
}
我的问题是,图像仅在滚动后才会出现在 UIImage 中,或者转到另一个 ViewController 之后,返回。
如果我使用注释代码与 NSUrl
等。没关系。
我的问题在哪里?为什么我使用 SDWebImage 时没有显示图像?
感谢您的帮助。
Table 具有大量行的视图仅显示给定 time.It 的总项目的一小部分 table 视图仅要求单元格正在显示的行 因此,在滚动 table 视图时,将重新使用单元格并重新填充单元格中的数据。
由于您使用的是下载的图像,因此速度似乎很慢。
您可以尝试在单元格中加载与图像视图完全相同大小的图像。