如何将UIPickerView的约束设置为UITableViewCell? (就像在Apple DateCell示例中一样)

时间:2014-01-16 08:08:10

标签: ios xcode uitableview storyboard uipickerview

我正在使用Apple的DateCell示例Xcode项目来弄清楚如何在UITableViewCell中使用UIPickerView,但是我在查找示例代码为故事板中的UIDatePicker设置的约束时遇到了一些麻烦。

链接:https://developer.apple.com/library/ios/samplecode/DateCell/Introduction/Intro.html

它说UIDatePicker有一个相对于实际UITableViewCell的约束,但是当我尝试在两者之间设置约束时,我不能。从选择器按住Ctrl键拖动到单元格不会突出显示单元格。我尝试使用单元格的内容视图而不是单元格本身,但这并不会产生与示例代码的故事板中相同的结果。

这些是项目为日期选择器设置的约束:

对于细胞:

示例的故事板如下所示:

如何使用约束重现上述图像?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我发现样本的静态高度不是我想要使用的,因为我有一些包含大量文本的单元格需要为每个单元格提供可变高度。因此,我使用UITableViewAutomaticDimension来自动调整我的所有单元格的高度,而不是样本中从预定义的故事板大小中获取拾取器单元高度的方法。如果你不想要自动高度,我仍然很容易调整以下解决方案来将高度设置为静态值,正如我在步骤3中提到的那样。

  1. 视图加载时将tableview行高设置为auto:

    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        self.tableView.estimatedRowHeight = 60.0; // Set your average height here.
        self.tableView.rowHeight = UITableViewAutomaticDimension;
    }
    
  2. 添加估计的高度以使其正常工作(至少在iOS 8中)。如果你不添加它,你可能会在绘制单元格高度时遇到一些错误的行为。

    - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
        return UITableViewAutomaticDimension;
    }
    
  3. 对于自动高度,请记住删除tableView:heightForRowAtIndexPath:定义(如果有),因为它可能会干扰自动设置。

    // Don't define this at all if you want the picker cell to have auto height.
    //- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    //{ }
    
    • 如果你想为选择器单元格使用静态高度,那么定义tableView:heightForRowAtIndexPath:函数并在此处返回静态值,而不是像使用自动维度一样样品做到了。示例可能是这样的:

      - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
      {
          // This would return the static height for the picker, but auto heights for the rest of the cells.
          return ([self indexPathHasPicker:indexPath] ? self.pickerCellRowHeight : UITableViewCellAutoDimension);
      }
      
    • 然后您修改示例以设置静态高度,而不是从viewDidLoad中的帧值中抓取它。

      // obtain the picker view cell's height, works because the cell was pre-defined in our storyboard
      //UITableViewCell *pickerViewCellToCheck = [self.tableView dequeueReusableCellWithIdentifier:kDatePickerID];
      self.pickerCellRowHeight = 216;//CGRectGetHeight(pickerViewCellToCheck.frame);
      
  4. 我没有尝试从示例中重新创建相同的约束,而是告诉storyboard重置为UIPickerView的建议约束,然后再添加一个。它在图片中添加了前两个,然后我又添加了一个用于对齐中心X.我的视图恰好具有自动设置中显示的数字,但您的可能不同。

    Storyboard of cell and constraints

    Reset to suggested constraints

  5. 如果你还没有完成它,那么使选择器工作的一部分是确保使用故事板和控制点击并拖动将UIPickerView的dataSource和委托设置为视图控制器。

    enter image description here