我们正在iOS 9(测试版)设备中测试我们的应用程序。加载表视图时应用程序崩溃。但是相同的代码在iOS 8中运行良好。
请找到以下代码
当前代码段
表格视图数据源
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
tableView.RegisterNibForCellReuse(UINib.FromName("summaryListCell", NSBu ndle.MainBundle), "summaryListCell");
summaryListCell cell = (summaryListCell)tableView.DequeueReusableCell(new NSString("summaryListCell"), indexPath);
cell.SetNeedsLayout ();
return cell;
}
TableView Cell类
using System;
using CoreGraphics;
using Foundation;
using UIKit;
using WBid.WBidiPad.Model;
using WBid.WBidiPad.SharedLibrary;
using System.Linq;
using WBid.WBidiPad.Core;
using System.Collections.Generic;
namespace WBid.WBidiPad.iOS
{
public partial class summaryListCell : UITableViewCell
{
public static readonly UINib Nib = UINib.FromName("summaryListCell", NSBundle.MainBundle);
public static readonly NSString Key = new NSString("summaryListCell");
public summaryListCell(IntPtr handle) : base(handle)
{
laySubViews (this);
}
public static summaryListCell Create()
{
summaryListCell cell = (summaryListCell)Nib.Instantiate(null, null)[0];
return cell;
}
public static void laySubViews(summaryListCell cell)
{
Console.WriteLine (cell);
UIImageView imgBack = new UIImageView();
imgBack.Frame = new CGRect (0, 0, 900, 50);
imgBack.Tag = 1010;
cell.ContentView.AddSubview(imgBack);
}
}
}
经过大量的思考和研究,我稍微改变了一下代码。初始化单元格后,我调用了layout subviews()类。请在下面找到代码
修改后的代码段
表格视图数据源
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
tableView.RegisterNibForCellReuse(UINib.FromName("summaryListCell", NSBu ndle.MainBundle), "summaryListCell");
summaryListCell cell = (summaryListCell)tableView.DequeueReusableCell(new NSString("summaryListCell"), indexPath);
// Added layoutsubview calling after initialization
cell.laySubViews(cell);
cell.SetNeedsLayout ();
return cell;
}
TableView Cell类
using System;
using CoreGraphics;
using Foundation;
using UIKit;
using WBid.WBidiPad.Model;
using WBid.WBidiPad.SharedLibrary;
using System.Linq;
using WBid.WBidiPad.Core;
using System.Collections.Generic;
namespace WBid.WBidiPad.iOS
{
public partial class summaryListCell : UITableViewCell
{
public static readonly UINib Nib = UINib.FromName("summaryListCell", NSBundle.MainBundle);
public static readonly NSString Key = new NSString("summaryListCell");
public summaryListCell(IntPtr handle) : base(handle)
{
// Removed the layoutsubview calling method
// laySubViews(this);
}
public static summaryListCell Create()
{
summaryListCell cell = (summaryListCell)Nib.Instantiate(null, null)[0];
return cell;
}
// Changed the static property from laySubViews method
public void laySubViews(summaryListCell cell)
{
Console.WriteLine (cell);
UIImageView imgBack = new UIImageView();
imgBack.Frame = new CGRect (0, 0, 900, 50);
imgBack.Tag = 1010;
cell.ContentView.AddSubview(imgBack);
}
}
}
通过上述修改,代码段在iOS 8和iOS 9中都有效。
我们在TableView中加载了400行(它只是一个数字,我们正在动态加载TableView)。现在TableView的滚动性能存在问题。滚动TableView时,TableView会挂起。
你能给我一个适用于iOS 8和iOS 9的解决方案吗?
请在下面找到系统详细信息。我们正在设备中测试iOS 9,我们正在使用以下配置部署应用程序,并且我们使用此配置得到确切的崩溃错误(我们在此配置中获得的错误与从App Store下载的应用程序获得的错误相同)
=== ====== ====== Xamarin Studio ====== ====== ===
版本5.9.3(版本1)安装UUID: d1449294-29ae-49f6-ab88-23f11a709f17运行时:单声道4.0.1 ((已分离/ ed1d3ec)GTK + 2.24.23(罗利主题)
包装版本:400010044
=== Apple Developer Tools ===
Xcode 6.3(7569)Build 6D570
=== Xamarin.iOS ===
版本:8.10.1.64(商业版)哈希:e6ebd18分支:主人 建设日期:2015-05-21 21:55:09-0400
===建立信息===
发行ID:509030001 Git修订版: 5a524e1726ed103fdd4fe37e0356f2b35466ce9d建立日期:2015-06-02 16:35:08-04 Xamarin地址:51957cfbd06be911b212671ad05c2c6221ac90f9
===操作系统===
Mac OS X 10.10.3 Darwin Deepaks-Mac.local 14.3.0 Darwin内核版本 14.3.0 2015年3月23日星期一11:59:05 PDT root:xnu-2782.20.48~5 / RELEASE_X86_64 x86_64
=== ====== ====== ====== ====== ====== ===
请您为这种情况提供解决方案吗?
答案 0 :(得分:0)
tableView.RegisterNibForCellReuse
一次。每次获得一个单元格时都不需要注册cell. laySubViews(cell);
和cell.SetNeedsLayout ();
是多余的。我没有看到你为什么需要这样做的原因。答案 1 :(得分:0)
问题在于Xamarin.iOS,我更新了Xamarin.iOS最新的稳定版本8.10.4.46。现在它在iOS8和iOS 9中完美运行。我没有更改任何代码段。现在我正在使用上面提到的第一个代码片段。