我正在努力实现一个我在草图上嘲笑的观点。我在Android上复制了它,因为我在这个平台上非常好。我在iOS上很擅长,但UI是我的弱点。
我扩展了UIViewController
并且在我的StoryBoard上有顶部是视图,底部是tableview。我遇到的问题是将UITableViewCell
置于应用程序本身的中心位置。以下是我尝试过的解决方案。但是,它只是把它全部挤到了顶端。 NB。我使用UIView
在UITableViewCell
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
}
任何帮助将不胜感激。感谢
输出:
答案 0 :(得分:20)
保持原样。不要试图插入整个TableView。在TableViewCell中创建一个容器视图:
设置行高:
同样在代码中:
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 160.0
}
指定边缘的正确距离:
现在添加元素并指定约束:
不要忘记设置cellIdentifier:
模拟器中的结果:
如果您想在引擎盖下查看它: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
之间添加左右边距,以便您可以将其居中。