- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个非常简单的 UIScrollView,其中包含一些内容(许多 subview )。此 ScrollView 用于显示用户发布的一些帖子(图片+文本)。其中一个 View 实际上是作者的图像,它溢出了底部单元格边界。因此它与后面的单元格重叠,使用 clipToBounds = false
我能够获得所需的结果。如果我向下滚动,一切都很好。当我开始向上滚动时,之前覆盖的 View 现在被剪掉了。
Cell overlapping working fine Cell overlapping not working (when I scroll up)
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellIdentifier = (indexPath.row % 2 == 0) ? "FeedCellLeft" : "FeedCellRight";
let cell = feedScrollView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! FeedCell;
self.setUpCell(cell, atIndexPath: indexPath);
return cell
}
setUpCell
函数只是执行一些与 UI 相关的任务
let row = indexPath.row
cell.postImage.downloadImageFrom(link: rows[row].image, contentMode: .scaleToFill)
cell.postAuthorImage.downloadImageFrom(link: "https://pbs.twimg.com/profile_images/691867591154012160/oaq0n2zy.jpg", contentMode: .scaleToFill)
cell.postAuthorImage.layer.cornerRadius = 22.0;
cell.postAuthorImage.layer.borderColor = UIColor.white.cgColor
cell.postAuthorImage.layer.borderWidth = 2.0;
cell.postAuthorImage.layer.masksToBounds = true;
cell.selectionStyle = .none
cell.postData.layer.cornerRadius = 10.0;
cell.contentView.superview?.clipsToBounds = false;
cell.clipsToBounds = false;
if (indexPath.row % 2 != 0) {
cell.postData.transform = CGAffineTransform.init(rotationAngle: (4 * .pi) / 180);
} else {
cell.postData.transform = CGAffineTransform.init(rotationAngle: (-4 * .pi) / 180);
}
deque 操作似乎破坏了我所做的布局(使用自动布局)。我试过很多这样的解决方案
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cell.contentView.superview?.clipsToBounds = false;
cell.clipsToBounds = false;
cell.contentView.clipsToBounds = false;
}
但结果看起来总是一样的。每行的高度是固定的。
最佳答案
我认为问题在于 subview 的层次结构。当您向下滚动时,您的单元格从上到下出队并以相同的顺序添加到 UITableView
并且一切看起来都很好。因为前一个单元格在 View 层次结构中位于以下单元格之上。但是当你向上滚动时,单元格从下到上出列,这意味着顶部的单元格在前一个单元格的“后面”。您可以使用 Debugging View Hierarchies 轻松查看它Xcode 的功能。
你可以尝试 bringSubviewToFront:
例如:
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cell.superview.bringSubview(toFront cell)
}
Updated version
我在 Playgrounds 中做了一些小的研究,发现只有一个合理的选择可以实现重叠单元而不会出现巨大的性能问题。该解决方案基于 cell.layer.zPosition
属性并且工作正常(至少在我的 Playground 中)。我用以下代码更新了 willDisplay cell:
中的代码:
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cell.layer.zPosition = (CGFloat)(tableView.numberOfRows(inSection: 0) - indexPath.row)
}
根据 .zPosition
( Apple Developer Documentation ) 的文档:
The default value of this property is 0. Changing the value of this property changes the the front-to-back ordering of layers onscreen. Higher values place this layer visually closer to the viewer than layers with lower values. This can affect the visibility of layers whose frame rectangles overlap.
所以我使用当前的 dataSource
计数器作为 minuend 和当前单元格的 indexPath.row
作为 subtrahend 到为每个单元格计算层的 zPosition
。
You can download full version of my playground here.
关于ios - dequeueReusableCell 打破 cliptobounds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40684687/
我正在开发 Silverlight 应用程序,我的问题是这样的:我有一个 WrapPanel和内部 WrapPanel我正在添加一些图像。然后,我旋转这些图像 90 度或 -90 度。 因此,如果我的
我正在 map 上绘制线条,我注意到我的注释 View 没有覆盖线条的整个区域(这很好,只要我可以在 View 边界之外绘制)。 这是我正在经历的事情的图片。对于注释 View ,clipToBoun
我有一个非常简单的 UIScrollView,其中包含一些内容(许多 subview )。此 ScrollView 用于显示用户发布的一些帖子(图片+文本)。其中一个 View 实际上是作者的图像,它
我有一个自定义类,它为我的按钮添加了边框,并具有在左上角创建“X”按钮的功能。 第一个问题:为了使 X 按钮出现在图像按钮的边界之外,我必须关闭图像按钮上的 clipToBounds。但这具有让图像穿
我有一个默认隐藏多个标签的自定义单元格(用户在单击该单元格时会看到所有内容)。我正在更改单元格的高度和 cell.clipToBounds = true 以隐藏标签。但这不适用于可编辑的单元格。当我开
我有一个应用程序,它在 WPF 中的 Image 对象内显示图像。该图像包含在其 xaml 如下所示的控件中: 其中两个控件包含在窗口的网格中,如下所示:
我正在尝试查找 ClipToBounds 的等效项在 Windows 运行时中。如果它不存在,是否有办法重新创建此行为? 最佳答案 这是我使用的解决方案: public class Clip {
我有一个“ mask Canvas ”,我正在使用它作为我主要绘画 Canvas 的 OpacityMask 的来源。 我的两个 Canvas 大小相同,但当我开始在 Canvas 边界附近绘画时,我
我有一个 ImageView ,它开始使用 clipsToBounds 裁剪图像并将内容模式设置为“比例纵横比填充”,我希望它将图像“放大”到整个图像。如果 clipsToBounds=NO 是一个动
给定一个非常基本的 Grid,ColumnDefinition 的宽度设置为 *,其中包含的按钮的硬编码宽度属性将被忽略并且这些子元素被剪裁。它们不会被设置为 Auto 的宽度裁剪。 如果在每个 Co
我需要将 UIView 覆盖在 UIPageViewController 上,并希望它能让我关闭 clipsToBounds,然后将交互式边界区域的大小调整为较小的高度,并将另一个 View 放在非交
我不想剪切文本 block 的文本。为此,我将 viewBox.ClipToBounds 设置为 false,但它不起作用。 请告诉我为什么 ClipToBounds=false 在这段代码中不起作用
我试图在高度受限的网格中心放置一个矩形,如下所示: 我希望它看起来像这样: 但它看起来像这样: 我知道我的子矩形更大,它的剪辑是可以理解的,但是,我的 Cli
我有一门课需要 NSString作为参数,使用 Core Text 获取文本的大小,提取每一行并以不同的 x 偏移量渲染文本行,以产生倾斜的效果。 当 Core Graphics 绘制文本行时,我也会
我有一个宽度/高度为 256x256 的 ScrollView 。我有那个 ScrollView 的 subview 在两个方向(左和右)延伸。我将 clipToBounds 设置为 NO,这样我就可
我有 UIScrollView 和其中包含 UIImageView 的对象数量(UIView 组合)。一些 UIImageViews 有圆形边框(为此我使用 myImageView.layer.mas
UITableView放在 UINavigationController将有一个类型为 UINavigationTransitionView 的父 View , 及其 clipToBounds是 tr
我需要在 WPF 中显示工具栏边界外的一些子项(光标悬停时工具栏上的按钮会变大)。 Image 1: Right panel behavior: ClipToBounds="False" 当 Clip
我有两个 UIView。我用一个来容纳另一个,这样我就可以将一个滑入另一个。我遇到了一个问题,即使 subview 被裁剪到其父 View 的边界,它仍然接收触摸事件并阻止访问其他底层 View 。
iOS 7 的重新设计导致 UITableViewCells 的 View 层次结构发生变化。单元格的内容 View 包装在一个名为 UITableViewCellScrollView 的私有(pri
我是一名优秀的程序员,十分优秀!