将保证金添加到UITableViewCell

时间:2015-08-02 07:50:48

标签: ios swift uitableview

我正在努力实现一个我在草图上嘲笑的观点。我在Android上复制了它,因为我在这个平台上非常好。我在iOS上很擅长,但UI是我的弱点。 The Image

我扩展了UIViewController并且在我的StoryBoard上有顶部是视图,底部是tableview。我遇到的问题是将UITableViewCell置于应用程序本身的中心位置。以下是我尝试过的解决方案。但是,它只是把它全部挤到了顶端。 NB。我使用UIViewUITableViewCell

中绘制那些微小的线条
func configureTableView() {
    //First One I tried then later commented it out
    loanStateTable.rowHeight = UITableViewAutomaticDimension
    loanStateTable.scrollToNearestSelectedRowAtScrollPosition(UITableViewScrollPosition.Middle, animated: true)

    //Second One I tried
    var edgeInset = UIEdgeInsets(top: 16, left: 16, bottom: 0, right: 16)
    loanStateTable.contentInset = edgeInset
}

故事板视图UITableViewCell

任何帮助将不胜感激。感谢

输出:

OutPut Image

3 个答案:

答案 0 :(得分:20)

保持原样。不要试图插入整个TableView。在TableViewCell中创建一个容器视图:

enter image description here

设置行高:

enter image description here

同样在代码中:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return 160.0
}

指定边缘的正确距离:

enter image description here

现在添加元素并指定约束:

enter image description here enter image description here enter image description here enter image description here

不要忘记设置cellIdentifier:

enter image description here

模拟器中的结果:

enter image description here

如果您想在引擎盖下查看它:I've uploaded it as github project

答案 1 :(得分:1)

我不知道我是否理解你的问题。我认为你的问题是在屏幕上垂直居中这两行。我的代码那样做。

<强>方法

  

我通常通过在开头和/或结尾添加额外的单元来播放   UITableView

#define cell_height 100

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return array.count + 1;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row > 0)
        return cell_height;
    else
    {
        CGFloat tableHeight = tableview.frame.size.height;
        CGFloat contentHeight = array.count * cell_height;
        CGFloat whiteAreaHeight = tableHeight - contentHeight;
        if (whiteAreaHeight > 0)
            return whiteAreaHeight/2.0;
        else
            return 0;
    }
}

- (UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
    if (indexPath.row > 0)
    {
       NSInteger realArrayIndex = indexPath.row - 1;
       // your existing code here
       return cell;
    }
    else
    {
       //return empty cell. add it to the storyboard with different identifier and get it.
    }
}

我希望有所帮助!

答案 2 :(得分:0)

从屏幕截图中看,您的自动布局系统和动态单元格存在问题。因为这建议阅读这个非常好的answer堆栈溢出,解释如何使用自动布局构建动态单元格。需要考虑的一件重要事情是,使用自动布局创建视图非常快速和直观,但从性能的角度来看,它很昂贵。对于UITableView,此问题会突出显示滚动可能不顺畅的问题。如果你有简单的单元格(只有少数几个视图和一个层次很少的视图层次结构),它可以没问题,但我建议自动布局管理器:

  • 如果所有单元格具有相同的高度,则为属性estimatedRowHeight指定值
  • 如果单元格具有不同的高度,则实现tableView(_:estimatedHeightForRowAtIndexPath:)的方法UITableViewDelegate

关于边距问题,我建议将UIView嵌套在单元格的contentView内,并将其用作单元格所有其他视图的容器。通过这种方式,您可以在此视图容器和contentView之间添加左右边距,以便您可以将其居中。