我的纯AutoLayout UITableViewCell
在Interface Builder中看起来像这样:
UITableViewCell
|-> UITableViewCell.contentView
|-> UIView (ScrollViewContainerView)
|-> UIScrollView
|-> left (fixed)
|-> center (fill remaining)
|-> right (fixed)
UIScrollView
包含left
,center
和right
UIView
。 left
和right
都是固定宽度,center
展开以填充UIView
的其余部分。 UIScrollView
约束是将所有边对齐到ScrollViewContainerView
。 ScrollViewContainerView
约束是将所有边对齐到UITableViewCell.contentView
。我对center
宽度的约束是ScrollViewContainerView
宽度的倍数,因此UIScrollView
向左和向右滚动,但高度是固定的并且不滚动。请注意,UIScrollView
已被子类化以包含this code,以便UITableView
可以检测到单元格上的点按以切换选择。
问题是我目前可以向上滚动包含这些UITableView
的{{1}} 或我可以滚动{{1}中的UITableViewCells
左右,不两者。
UIScrollViews
时,我无法向上和向下滚动UITableViewCells
,但我可以向左和向右滚动UIScrollView。当ScrollViewContainerView.userInteractionEnabled == YES
时,我可以向上和向下滚动UITableView
,但我无法向左和向右滚动UIScrollView。 ScrollViewContainerView.userInteractionEnabled == NO
关于上述层次结构中的其他所有内容。
我可以让UITableView
成为userInteractionEnabled == YES
的同级视图(使ScrollViewContainerView
成为UIScrollView
的直接下降 - - 无法完全摆脱此视图,因为我需要它来获取UIScrollView
contentView
的尺寸。在这种情况下,与UIScrollView
的相反处理成立。
我知道我之前已经在其他项目中做过这件事,但重新开始,我似乎无法弄清楚我错过了什么步骤。目前使用针对iOS 8的Xcode 6 6A215l,虽然我已经在针对iOS 7的Xcode 5下重现了该问题。
答案 0 :(得分:1)
听起来像scrollview导致你的tableview在滚动时不允许userInteraction。我敢肯定,如果您在UIScrollView委托中调用- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
(对iOS 8不确定),但您可以这样做
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
if(scrollView.dragging == YES) {
self.<scrollViewName>.userInteractionEnabled = NO;
}
}
这是未经测试的代码,但只需要帮助您到达目的地。
希望它有所帮助!
答案 1 :(得分:1)
我遇到了类似的问题。
我在tableViewCell中有一个scrollView。一切正常。
直到有一天,有人告诉我,当在6p的scrollView上触摸手指时,tableView无法向上/向下滚动。只是6p,而不是5,5s或6。
这让我几乎疯了。
最后,我将scrollView的高度设置为小于storyboard中的高度。
Biu~它有用~~~
但是,我不知道为什么。
答案 2 :(得分:0)
@ user2277872的回答让我走上了正确的轨道,看看我的UIScrollView
子类中UIScrollView
的{{1}}委托方法的输出。在UITableViewCell
中添加NSLog()
会让我注意到{I} 当我尝试滚动scrollViewWillBeginDragging:
时接收滚动事件。我的UIScrollView
在两个方向上的UITableView
大于UIScrollView
,但我强制该视图仅向水平滚动,因此忽略高度并重置它。那个力量是我的毁灭,我当时应该知道它 - 正确的解决办法是修复框架高度。如果contentSize
认为没有更多垂直内容,则会正确地将向上/向下滑动手势转发到UIScrollView
。
虽然我试图弄清楚为什么我的UITableView
在以前没有过大时(我以为我错过了某个地方contentSize
),我在做什么暂时强制水平滚动是(在clipToBounds
的子类中):
UITableViewCell
编辑:实际上,这似乎比覆盖- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
CGSize contentSize = self.scrollView.contentSize;
contentSize.height = self.frame.size.height;
self.scrollView.contentSize = contentSize;
}
更好。这将在drawRect
子类中:
UIScrollView
/*
* Lock to horizontal scrolling only.
*/
- (void)setContentSize:(CGSize)contentSize
{
[super setContentSize:CGSizeMake(contentSize.width, 1)];
}
height
成员并不重要,只要它保证小于struct
的{{1}}即可。仍然很hacky,仍然需要找到我之前可以剪辑的原因而不是现在。