C#Monotouch/Xamarin-UITableViewCell GetCell ImageView框架未调整大小
概述 我在UITableViewSource中有以下覆盖GetCell。 一切正常,但我想缩小单元格左侧的图像,而不必调整大小。 本质上,我只是想缩小框架,比如说,(30宽x 30高)…也许还可以把角落弄圆(类似于Whatsapp的开放式聊天列表) 问题 简单地将新的矩形应用于ImageView的Frame属性似乎不起作用C#Monotouch/Xamarin-UITableViewCell GetCell ImageView框架未调整大小,c#,uitableview,xamarin.ios,imageview,xamarin,C#,Uitableview,Xamarin.ios,Imageview,Xamarin,概述 我在UITableViewSource中有以下覆盖GetCell。 一切正常,但我想缩小单元格左侧的图像,而不必调整大小。 本质上,我只是想缩小框架,比如说,(30宽x 30高)…也许还可以把角落弄圆(类似于Whatsapp的开放式聊天列表) 问题 简单地将新的矩形应用于ImageView的Frame属性似乎不起作用 if (tableItems[indexPath.Section].Items[indexPath.Row].ImageName != null)
if (tableItems[indexPath.Section].Items[indexPath.Row].ImageName != null)
{
//RESIZE IMAGE VIEW
cell.ImageView.Frame = new RectangleF(5,5,30,30);
Console.WriteLine("Image name: " + tableItems[indexPath.Section].Items[indexPath.Row].ImageName);
cell.ImageView.Image = UIImage.FromFile (tableItems[indexPath.Section].Items[indexPath.Row].Image);
}
代码
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
UITableViewCell cell = tableView.DequeueReusableCell (cellIdentifier);
Custom_UITableItem item = tableItems[indexPath.Section].Items[indexPath.Row];
var cellStyle = UITableViewCellStyle.Subtitle;
// if there are no cells to reuse, create a new one
if (cell == null)
{
cell = new UITableViewCell (cellStyle, cellIdentifier);
}
try
{
if(cellAccessoryButtons.Count > 0)
{
var cellAccessoryButton = cellAccessoryButtons [indexPath.Row];
cell.AccessoryView = cellAccessoryButton;
}
cell.TextLabel.Text = tableItems[indexPath.Section].Items[indexPath.Row].Heading;
cell.TextLabel.Font = AppSettings.CellDetailTextLabelFontSize;
cell.TextLabel.LineBreakMode = UILineBreakMode.WordWrap;
cell.TextLabel.Lines = 2;
cell.DetailTextLabel.Text = tableItems[indexPath.Section].Items[indexPath.Row].SubHeading;
cell.DetailTextLabel.Font = AppSettings.CellDetailTextLabelFontSize;
cell.DetailTextLabel.LineBreakMode = UILineBreakMode.WordWrap;
cell.DetailTextLabel.Lines = 2;
if (tableItems[indexPath.Section].Items[indexPath.Row].ImageName != null)
{
//RESIZE IMAGE VIEW
cell.ImageView.Frame = new RectangleF(5,5,30,30);
Console.WriteLine("Image name: " + tableItems[indexPath.Section].Items[indexPath.Row].ImageName);
cell.ImageView.Image = UIImage.FromFile (tableItems[indexPath.Section].Items[indexPath.Row].Image);
}
var trackUploadedDateFrame = new RectangleF (87, 55, 100, 20);
var trackUploadedDate = new UILabel (trackUploadedDateFrame);
trackUploadedDate.BackgroundColor = UIColor.Clear;
trackUploadedDate.Font = AppSettings.TrackUploadedDateFontSize;
trackUploadedDate.TextAlignment = UITextAlignment.Left;
trackUploadedDate.Text = "Uploaded: 16/10/13";
cell.AddSubview (trackUploadedDate);
}
catch(Exception ex)
{
Console.WriteLine (ex.ToString ());
}
return cell;
}
简言之,“已经做到了,做到了”,让我告诉你定制股票UITableViewCell——特别是它的ImageView是一件非常痛苦的事情
根据我的经验,通过子类化UITableViewCell(在代码中或使用IB的.xib中)来实现您的设计目标更容易,除非库存UITableViewCell的功能非常接近您自己的目标 使用以下函数调整图像大小,然后将其设置为表格单元格图像视图
public UIImage ResizeImage(UIImage sourceImage, float width, float height)
{
UIGraphics.BeginImageContext(new SizeF(width, height));
sourceImage.Draw(new RectangleF(0, 0, width, height));
var resultImage = UIGraphics.GetImageFromCurrentImageContext();
UIGraphics.EndImageContext();
return resultImage;
}
我不会说这很难…任何可以在界面生成器中完成的事情都可以在代码中完成。我只是想知道是否需要为这个图像创建一个新的UIView,设置一个帧大小,添加图像,然后将这个新的UIView绑定到cell.ImageView内容…(虽然很遗憾我不在家,所以还不能测试这个选项)。