【问题标题】:Image on cells not all the way to the left单元格上的图像并非一直到左侧
【发布时间】:2016-11-27 05:43:20
【问题描述】:

我正在学习 iOS 上的 UITableview 并在线学习课程。我的表格显示得很好,但我的单元格上的图像并不是一直向左(而教练的图像是)。以下是相关单元格的屏幕截图:

我不想要那个间隙,我希望图像位于单元格的开头,一直到左侧。我做了一些研究,似乎苹果已经改变了 ios6 和 ios7 之间单元格的默认外观,所以现在单元格中的图像在左侧显示了一点间隙。为了摆脱它,我尝试了 UIEdgeInsets:

[tableView setSeparatorInset:UIEdgeInsetsZero];

这是行不通的。我也尝试过这种方法:

cell.imageView.frame = CGRectMake( 0, 0, 50, 55 );

什么都没有发生。那么我该怎么做呢?谢谢

编辑------------------------------- -------------------------------------------------- ----------------------------------

仍然没有找到答案。此处发布的解决方案不起作用。我找到了这段代码:

self.tableView.contentInset = UIEdgeInsetsMake(0, -50, 0, 0);

除了让我完全困惑之外(因为受影响的参数应该是 y?)我认为通过使单元格上的图像一直显示在左侧来解决问题,直到我意识到它只是将整个视图移动到左(正如我猜想的那样)在屏幕的另一侧留下相等的间隙。我想要的只是让单元格中的图像一直出现在单元格的左侧,就像以前的 ios 一样。谢谢

【问题讨论】:

  • 使用CustomeCell并在Custom Cell中设置图片、标签。
  • 我认为您的表格处于编辑模式
  • 能否请您发布您如何制作 tableviewcell 的代码。即图像如何添加到单元格中。
  • 你用过 AutoLayout(constraints) 还是没用过?
  • 你检查了所有的答案吗?如果答案不充分,请发布更多代码/详细信息。

标签: ios objective-c xcode uitableview


【解决方案1】:

这是因为默认的表格内容从左侧偏移为 15,您应该将其更改为 0。 看到这个,你就会明白Remove empty space before cells in UITableView

【讨论】:

  • 你也应该把代码放在你自己的答案中,而不是只链接到别人的。
  • 我已经尝试了帖子的建议,但是 self.automaticallyAdjustsScrollViewInsets = NO;不做我想做的事。事实上,它让事情变得更糟,因为现在表格隐藏在顶部导航栏后面。我不希望整个表格表现不同,我只需要单元格内的图像从点 0 开始。 self.tableView.contentOffset = CGPointMake(0, 40);也不行。我很惊讶这是多么困难,当它应该是一行代码时。
  • 试试 self.tableView.contentOffset = CGPointMake(0, 0);并在你的 cellForRowIndexPath 方法中写下这些行 cell.separatorInset = UIEdgeInsetsZero; [单元格 setLayoutMargins:UIEdgeInsetsZero]; cell.preservesSuperviewLayoutMargins = NO;它应该可以按您的意愿工作。
【解决方案2】:

如果您创建自定义单元格。 UITableViewCell 拥有所有者 imageView。更改单元格中图像的标题。 如果您使用默认单元格,请使用约束前导空格 = 0 的自定义单元格。

【讨论】:

    【解决方案3】:

    最好不要使用单元格的默认 imageView。从objective库中拖放UIImageView,创建一个自定义的table view cell(UITableViewCell的Child class)然后创建和outlet刚刚拖拽的image view。

    【讨论】:

      【解决方案4】:

      UITableViewCell 中的间距是因为UITableViewDelegateshouldIndentWhileEditingRowAtIndexPath 方法返回的默认TRUE

      我能够通过以下方案重现您的问题

      UITableView 处于可编辑模式:

      self.tableView.editing = true
      

      你已经实现了:

      - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView
                 editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
          return UITableViewCellEditingStyleNone;
      }
      

      要更正您的代码: 如果您不想设置编辑样式,则可以通过

      关闭编辑模式
      self.tableView.editing = false
      

      并删除editingStyleForRowAtIndexPath

      如果您需要编辑模式,则设置适当的编辑样式(UITableViewCellEditingStyleDeleteUITableViewCellEditingStyleInsert)或关闭缩进。

      - (BOOL)tableView:(UITableView *)tableView
      shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {
       return FALSE;
      }
      

      【讨论】:

        【解决方案5】:

        您必须通过添加一个新类作为 UITableViewCell 的子类来创建自定义单元格。然后您可以设计具有自动布局和约束的单元格,这将解决该问题。

        【讨论】:

          【解决方案6】:

          还有另一种具体的方法可以通过创建子类 uitableviewcell(自定义类)来实现。

          要遵循的步骤

          • 创建 UITableViewCell 的类子类。
          • 在 .h 文件中创建 UI 组件的属性和出口。
          • 转到情节提要并在表格视图中添加表格视图单元格。
          • 现在添加 UI 组件,例如:imageview 或 button 等,并根据设置 x、y 值。
          • 使用身份检查器将自定义单元格的类设为您的类名,参见图片。
          • 连接 UI 组件的所有出口。

          使用下面的代码 uitableview

          - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
              NSString *MyIdentifier = @"uniqueIdentifire";
              yourCustomClassForCell *cell = (yourCustomClassForCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
          
              if (cell == nil){
                  cell = [[yourCustomClassForCell alloc] initWithStyle:UITableViewCellStyleDefault
                                                           reuseIdentifier:MyIdentifier];
          
              }
          
              cell.imageView.image = [imageAry objectAtIndex:indexPath.row];
          }
          

          不要忘记通过使用情节提要属性检查器 uniqueIdentifire 选择您的单元格来提供 identifireidentifire 属性参见图片。

          您也可以在单元格之间留出一些垂直空间,只需在 customeCellClass 中添加以下代码(仅限方法)。

          - (void)setFrame:(CGRect)frame {        // method to insert gap between table view cell
              frame.origin.y += 6;
              frame.size.height -= 2 * 6;
              [super setFrame:frame];
          }
          

          【讨论】:

            【解决方案7】:

            你不能真正改变uitableviewcell的内置子视图的框架,比如imageview、accessoryview。但是如果你创建了一个自定义的 tableviewcell 类(即使你没有向它添加任何其他子元素),你可以通过覆盖 UITableViewCell 中的 layoutSubviews 方法来更改内置 imageview 的框架。我试过了,效果很好。

            #import "TableViewCell.h"
            
            @implementation TableViewCell
            
            - (void)awakeFromNib {
                [super awakeFromNib];
                // Initialization code
            }
            
            - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
                [super setSelected:selected animated:animated];
            
                // Configure the view for the selected state
            }
            
            -(void) layoutSubviews{
                [super layoutSubviews];
                CGRect frame = self.imageView.frame;
                frame.origin.x = 0;
                self.imageView.frame = frame;
            }
            
            @end
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-10-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多