相关疑难解决方法(0)

iOS 10中的UITableViewCell动画高度问题

UITableViewCell当识别水龙头时,我的动画会高度显示它的高度.在iOS 9及更低版本中,这个动画很流畅,没有任何问题.在iOS 10测试版中,动画期间出现了一些不和谐的跳跃.有没有办法来解决这个问题?

这是代码的基本示例.

- (void)cellTapped {
    [self.tableView beginUpdates];
    [self.tableView endUpdates];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return self.shouldExpandCell ? 200.0f : 100.0f;
}
Run Code Online (Sandbox Code Playgroud)

编辑:9/8/16

这个问题在全球机制中仍然存在.经过更多调试后,我发现问题与单元格立即跳到新高度有关,然后将相关单元格偏移动画.这意味着任何CGRect依赖于单元格底部的基础动画都不起作用.

例如,如果我有一个约束到单元格底部的视图,它将跳转.解决方案将涉及使用动态常量对顶部的约束.或者想一下另一种方法来定位你的观点,然后再与底层相关.

objective-c ios10

24
推荐指数
3
解决办法
6877
查看次数

iPhone - UITableViewCell高度变化的平滑动画,包括内容更新

可能重复:
您可以选择UITableViewCell上的高度更改动画吗?

我有一个表格视图,您可以在其中单击swich进入单元格,表格视图的许多单元格可能会更改其高度.计算哪些单元格会改变它们的大小有点复杂,所以我不想调用两次相同的代码.

我有一个heightForRowAtIndexPath方法(这是一个复杂的方法).

有没有办法让细胞生长或减少特征的动画而不会影响不改变的特征?

我已经尝试过UIViewAnimations,reloadData用于带动画的部分,但是我没有找到任何平滑的东西.我试图抓住每个必须更改的单元格,并在每个单元格上调用带动画的reloadData.它接近工作,但细胞一个接一个地更新.正如我之前所说,我不想这样做,因为我必须调用两次heightForRowAtIndexPath方法.

我想要的是能够使每个细胞变得生动的东西,这些细胞具有变化的高度,像生长或减少运动,而不是褪色.

你知道这样做的方法吗?还有一件事,当尺寸变化时(一些文字添加,背面颜色变化,以及类似的东西),单元格的内容会发生一些变化

iphone animation resize uitableview

22
推荐指数
1
解决办法
2万
查看次数

如何使用自动布局动画UITableViewCell高度?

关于UITableViewCell高度动画的Stack Overflow上有很多类似的问题,但是对于新的iOS8自动布局驱动的表视图没有任何效果.我的问题:

定制单元格:

@property (weak, nonatomic) IBOutlet iCarousel *carouselView;
@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;
@property (weak, nonatomic) IBOutlet UIButton *seeAllButton;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *carouselHeightConstraint;
Run Code Online (Sandbox Code Playgroud)

注意carouselHeightConstraint.这是内容视图的子视图(唯一的子视图)的高度约束.

高度设置230.0f为例如.首次加载时,它看起来像: 在此输入图像描述

然后,在查看所有操作我要扩展单元格,我的代码:

- (IBAction)seeAllButtonAction:(id)sender {

  BOOL vertical = !self.carouselCell.carouselView.vertical;
  self.carouselCell.carouselView.type = vertical ? iCarouselTypeCylinder : iCarouselTypeLinear;
  self.carouselCell.carouselView.vertical = vertical;

  [UIView transitionWithView:self.carouselCell.carouselView
                    duration:0.2
                     options:0
                  animations:^{

    self.carouselCell.carouselHeightConstraint.constant = vertical ? CGRectGetHeight(self.tableView.frame) : 230;
    [self.carouselCell setNeedsUpdateConstraints];
    [self.carouselCell updateConstraintsIfNeeded];
    [self.tableView beginUpdates];
    [self.tableView endUpdates];

                  completion:^(BOOL finished) { …
Run Code Online (Sandbox Code Playgroud)

objective-c uitableview ios autolayout ios8

20
推荐指数
1
解决办法
1万
查看次数

使用reloadRowsAtIndexPaths重新加载时,为什么我的表视图单元格会消失?

我这里有一个简单的示例项目:

http://dl.dropbox.com/u/7834263/ExpandingCells.zip

在这个项目中,UITableView有一个自定义的UITableViewCell.在每个单元格中有3个包含标签的UIViews.

目标是在敲击时扩展单元格,然后在再次敲击时将其折叠.单元格本身必须更改其高度以显示子视图.插入或删除行是不可接受的.

演示项目几乎按预期工作.事实上,在iOS 4.3中,它的工作非常完美.然而,在iOS 5下,当行崩溃时,先前的单元格神奇地消失.

要重新创建问题,请在iOS 5的模拟器或设备中运行项目,然后点击第一个单元格以展开它.然后再次点击该单元格以折叠它.最后,直接点击它下面的单元格.前一个消失了.

继续点击该部分中的每个单元格将导致所有单元格消失,直到整个部分缺失的位置.

我也尝试使用reloadData而不是当前的设置,但这会破坏动画并且感觉有点像黑客.reloadRowsAtIndexPaths应该可以工作,但问题是为什么不呢?

查看下面发生的事情的图像:

表格出现:

表出现了

细胞扩展:

表扩展

细胞塌陷:

桌子倒塌了

细胞消失(当敲击下面的细胞时):

细胞消失了

不断重复,直到整个部分消失:

部分消失了

编辑: 覆盖alpha是一个黑客,但有效.这是另一个"黑客"修复它,但为什么它修复它?

JVViewController.m第125行:

if( previousIndexPath_ != nil )
{
    if( [previousIndexPath_ compare:indexPath] == NSOrderedSame ) currentCellSameAsPreviousCell = YES;

    JVCell *previousCell = (JVCell*)[self cellForIndexPath:previousIndexPath_];

    BOOL expanded = [previousCell expanded];
    if( expanded )
    {
        [previousCell setExpanded:NO];
        [indicesToReload addObject:[previousIndexPath_ copy]];
    }
    else if( currentCellSameAsPreviousCell )
    {
        [previousCell setExpanded:YES];
        [indicesToReload addObject:[previousIndexPath_ copy]];
    }

    //[indicesToReload addObject:[previousIndexPath_ copy]];
}
Run Code Online (Sandbox Code Playgroud)

编辑2:

对演示项目做了一些小改动,值得检查并查看JVViewController didSelectRowAtIndexPath方法.

iphone objective-c uitableview ios

19
推荐指数
4
解决办法
2万
查看次数

在键入时调整包含UITextView的UITableViewCell

我有一个包含自定义单元格的UITableViewController.每个单元格都是使用nib创建的,并包含一个不可滚动的UITextView.我在每个单元格中添加了约束,以便单元格将其高度调整为UITextView的内容.所以最初我的控制器看起来像这样:

初始状态

现在我希望当用户在单元格中键入内容时,其内容会自动适应.这个问题已被多次询问,特别是这里第二个答案.因此,我在代码中编写了以下代理:

- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString*)text {
    [self.tableView beginUpdates];
    [self.tableView endUpdates];
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

然而,它会导致以下奇怪的行为:忽略所有约束,并且所有单元格高度都会崩溃到最小值.见下图:

错误的行为

如果我向下滚动tableView以强制进行新的cellForRowAtIndexPath调用,我将恢复单元格的正确高度:

正确的行为

请注意,我并没有如我所料的autoLayout来照顾这实现heightForRowAtIndexPath.

有人能告诉我我做错了什么或帮助我吗?非常感谢你 !

cocoa-touch uitableview uitextview ios autolayout

19
推荐指数
3
解决办法
2万
查看次数

扩展表格视图单元格消失

我通过setExpanded:方法调用改变高度来扩展单元格.

然后我调用reloadRowsAtIndexPaths:刷新单元格.

问题是细胞消失并随机重新出现.我怀疑这与索引工作方式有关.

如果我调用reloadData或beginUpdates/endUpdates,单元格按预期工作,但我丢失了动画.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    JVCell *cell = (JVCell*)[tableView cellForRowAtIndexPath:indexPath];
    JVCell *previousCell = nil;

    if( previousIndexPath_ != nil ) // set to nil in viewDidLoad
    {
        previousCell = (JVCell*)[tableView cellForRowAtIndexPath:previousIndexPath_];
    }


    // expand or collapse cell if it's the same one as last time
    if( previousCell != nil && [previousIndexPath_ compare:indexPath] == NSOrderedSame && [previousCell expandable] )
    {
        [previousCell setExpanded:![cell expanded]];
        NSArray *indexPathArray = [NSArray arrayWithObject:previousIndexPath_];
        [tableView reloadRowsAtIndexPaths:indexPathArray withRowAnimation:UITableViewRowAnimationAutomatic];
    }
    else
    {
        // collapse previous …
Run Code Online (Sandbox Code Playgroud)

iphone uitableview ios

17
推荐指数
2
解决办法
5605
查看次数

在UITableView中动画单元格高度更改

可能重复:
您可以选择UITableViewCell上的高度更改动画吗?

我想在选择UITableViewCell时改变它的高度.我可以通过定义来做到这一点

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)

并在选择单元格时调用tableview的reloadData,但我希望将更改设置为动画.关于如何解决这个问题的任何建议?

iphone height animation uitableview

15
推荐指数
1
解决办法
3万
查看次数

在方向更改时更改UITableViewCell高度

我有一个UITableView,单元格包含可变高度的UILabels.我能够计算标签需要使用的最小高度sizeWithFont:constrainedToSize:lineBreakMode:,这在首次加载表视图时工作正常.当我旋转表格视图时,单元格变宽(意味着显示内容所需的行数更少).在方向更改动画期间或之前或之后,有什么方法可以让UITableView重新确定单元格的高度?谢谢.

resize orientation uitableview

11
推荐指数
2
解决办法
8558
查看次数

在不使用reloadData的情况下实时调整UITableViewCell的大小?

首先,请原谅我,如果答案已经存在(我老实说,我已经工作并且搜索了大约两周).

现在,情况如下:

我有UITextView作为的一个子视图UITableViewCellUITableView.这UITextView是第一个响应者(当用户键入时).

我已经设置了(通过委托协议方法),以便在每个键入的字符之后,rowHeight重新计算单元格(正确地并在tableViews委托协议中为rowHeight).到目前为止一切都很好.

然后,我希望重新加载(或刷新,无论术语是什么)该单元格而不将其子视图UITextView作为第一响应者重新签名.

解决问题的一个不令人满意的解决方案:

我可以使用[tableView reloadData],然后[textView becomeFirstResponder]模拟这种(让用户甚至不会注意到的TextView被重新加载)和rowHeight的是完美的,但是这已经引起了我很多的问题(特别是确保光标不每次用户键入一个字符时都不会跳到最后,并且由于textView重新签名而自动更正强制执行其建议.

有没有办法重绘或调整大小UITableViewCell(以动态更改它rowHeight)而不会导致其任何子视图作为第一响应者辞职?

iphone uitableview uitextview resignfirstresponder

8
推荐指数
1
解决办法
8129
查看次数

Swift:如何在写入时不断调整 UICollectionViewCell 高度以适应 UITextView?

下午好。

我已经在我的 iOS 应用程序的这个“功能”上苦苦挣扎了几个小时,我需要一些帮助。

问题:我应该如何实现,以便当用户输入UITextView尺寸的增加(仅底部边距)并且单元格增加其高度以UITextView同时动态适应?我不知道如何解决它。

研究: 经过一番搜索后,我发现在键入文本时动态更改单元格的高度,并重新加载包含的表格视图以调整大小以及 您可以在选择时对 UITableViewCell 上的高度变化进行动画处理吗? 我还阅读了https://developer.apple.com/documentation/uikit/uicollectionview但我觉得到目前为止我的快速知识不如这些帖子中的预期。

换句话说,我不知道如何为我的 UICollectionView 实现它。

UITextView我的代码现在看起来像这样(我在 EventsCell 中有更多 UI 元素,但将它们剪掉以节省空间,因此它只是我想要更改的底部边距)。我已经将 RootCell 设置delegate为我的UITextView,然后我打算在编辑时获取 textView 高度,以获得我想要的高度,但它不起作用。

细胞类别:

class EventsCell: UICollectionViewCell {
  override init(frame: CGRect) {
    super.init(frame: frame)
    backgroundColor = UIColor.white
    setupViews()


  }
  let textView: GrowingTextView = { // GrowingTextView is a cocoapod extending UITextView
    let rootCellDelegate = RootCell()
    let tv = GrowingTextView()
    tv.backgroundColor = .clear
    tv.allowsEditingTextAttributes = true
    tv.isScrollEnabled …
Run Code Online (Sandbox Code Playgroud)

uitextview ios uicollectionview uicollectionviewcell swift

7
推荐指数
2
解决办法
2152
查看次数