由于自定义单元格创建,UITableview 在滚动时变得不稳定?
我已经为我的 uitableview 使用了自定义单元格类,并在 cellForRowAtIndexPath 方法中使用。
在该方法中,cellIdentifier 已经被定义,甚至 cell 属性也被用作 dequeueReusable。
但是,每次创建自定义单元格对象并调用其方法时滚动我的表格视图。由于设备上的原因,滚动会出现不稳定的效果。
我还检查了 if(cell==nil) 并在其中为该自定义单元格分配我的图像和标签属性。但每次,这个条件都为真,程序指针就会进入该条件。
请指导我。
如果可能,请提供一些示例代码。
预先感
谢姆鲁纳尔。
I have used custom cell class for my uitableview and used in cellForRowAtIndexPath method.
In that method cellIdentifier is already been defined and even cell property is used as dequeueReusable.
But while scrolling my tableview each time my custom cell objects gets created and its methods get called. Because of that on device, scrolling gets jerky effects.
I have also checked if(cell==nil) and inside that i m assigning my image and labels property for that custom cell. But each and every time, this condition gets true and program pointer goes inside that condition.
Please guide me on this.
If possible please provide some example code.
Thanks in advance
Mrunal.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我有相当复杂的
UITableViewCell
。对我来说,诀窍是将单元格层的shouldRasterize
设置为YES
。但它引入了模糊的文本。为了避免这种情况,我设置了比例 -[self.layer setRasterizationScale:[[UIScreen mainScreen] scale]]
。I have pretty complex
UITableViewCell
. For me the trick was to set theshouldRasterize
of the cell layer's toYES
. But it introduced blurry text. To avoid that I set the scale -[self.layer setRasterizationScale:[[UIScreen mainScreen] scale]]
.正如许多其他人指出的那样,除非您发布代码(您的 CellForRowAtIndexPath 应该足够了),否则我们无法真正帮助您。
一般来说,有很多方法可以提高 UITableView 的滚动性能,我使用的最重要的方法是(并且在其他 Stack Overflow 答案中使用过):
始终重用单元格,在以下情况下使用 dequeuereusablecellwithidentifier
创造新的细胞。这可以防止操作系统创建的开销
并在快速滚动时破坏大量对象。
折叠单元格的视图层次结构。而不是拥有很多
视图和子视图,创建自定义视图并完成所有单元格操作
在drawRect 中绘图。像 Twitter 这样的应用程序使用这种方法
超快速的单元格绘制。
确保您的图像不透明。您可以通过确保所有图像来做到这一点
资产没有内置 alpha 通道,并且通过设置
图层的不透明属性设置为 YES。
如果您设置单元格图像的图层属性的任何属性(例如阴影或圆角矩形),这可能会影响滚动性能。将图层的 shouldRasterize 设置为 YES 会有所帮助,但您应该认真考虑在单元格内执行任何密集的绘图操作。
有关更多详细信息,请参阅 http://developer.apple.com/library/ios/#samplecode/TableViewSuite/Introduction/Intro.html%23//apple_ref/doc/uid/DTS40007318-Intro-DontLinkElementID_2
As many others have pointed out, we can't really help you unless you post your code (your CellForRowAtIndexPath should be enough).
Generally speaking there are many ways of improving scrolling performance on UITableViews and the top ones I use are (and have used in other Stack Overflow answers):
Always reuse cells, use the dequeuereusablecellwithidentifier when
creating new cells. This prevents the overhead of the OS creating
and destroying lots of objects when scrolling fast.
Collapse the view hierarchy of the cell. Instead of having lots of
views and subviews, create a custom view and do all your cell
drawing in the drawRect. Apps like Twitter use this approach for
super fast cell drawing.
Ensure your images are opaque. You can do this by ensuring all image
assets don't have alpha channels baked into them and by setting the
layer's opaque property to YES.
If you are setting any properties of the cell image's layer property (like shadow or rounded rectangles) this can affect scrolling performance. Setting the layer's shouldRasterize to YES will help, but you should really think hard about doing any intensive drawing operations within cells.
For more details see http://developer.apple.com/library/ios/#samplecode/TableViewSuite/Introduction/Intro.html%23//apple_ref/doc/uid/DTS40007318-Intro-DontLinkElementID_2
发生这种情况是因为 ImageView。在 UITableView 的
CellAtIndexPathMehtod
中的if(cell == nil)
内创建标签和 imageView,并在此 if 之外分配其值。如果您的图像是从服务器加载的,则使用 异步图像加载
This is happening because of ImageView. Create your labels and imageViews inside
if(cell == nil)
inCellAtIndexPathMehtod
of UITableView and assign its value outside this if.And If your images are loading from server then use Asynchrnous image loading