我正在使用iOS 8新的自动调整单元格.在视觉上它运作良好 - 每个单元格大小合适.但是,如果我尝试滚动到最后一行,表视图似乎不知道它的正确大小.这是一个错误还是有解决方法?
使用这个项目 - TableViewCellWithAutoLayoutiOS8(从这个SO答案引用),我按预期得到了自动调整大小的单元格.
但是,如果我调用scrollToRowAtIndexPath函数,如下所示:
tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: model.dataArray.count - 1, inSection: 0), atScrollPosition: .Bottom, animated: true)
Run Code Online (Sandbox Code Playgroud)
我没有到达最后一排 - 它只让我到了中途.
即使试图使用这样的低级函数:
tableView.setContentOffset(CGPointMake(0, tableView.contentSize.height - tableView.frame.size.height), animated: true)
Run Code Online (Sandbox Code Playgroud)
结果不如预期,它不会达到目的.如果我点击很多次或等待片刻,最终它会到达正确的位置.似乎tableView.contentSize.height设置不正确,因此iOS"不知道"最后一个单元格在哪里.
非常感谢任何帮助.
谢谢
我有一个带有几个IBOutlets的自定义单元类.我已将该课程添加到故事板中.我连接了所有的插座.我的cellForRowAtIndexPath函数如下所示:
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as SwipeableCell
cell.mainTextLabel.text = self.venueService.mainCategoriesArray()[indexPath.row]
return cell
}
Run Code Online (Sandbox Code Playgroud)
这是我的自定义单元类:
class SwipeableCell: UITableViewCell {
@IBOutlet var option1: UIButton
@IBOutlet var option2: UIButton
@IBOutlet var topLayerView : UIView
@IBOutlet var mainTextLabel : UILabel
@IBOutlet var categoryIcon : UIImageView
init(style: UITableViewCellStyle, reuseIdentifier: String!) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,我的所有单元格都是空的.我已经注销self.venueService.mainCategoriesArray()
,它包含所有正确的字符串.我也试过把一个实际的字符串等于标签,这会产生相同的结果.
我错过了什么?任何帮助表示赞赏.
我在xcode 5
项目的autolayout上遇到了麻烦.我正在使用带有导航控制器的普通视图控制器.我有一个MKMapView
在上半部分和一个UITableView
在下半部分.我正在使用storyboards
,并已配置原型UITableViewCell
,但我通过代码添加约束.我已经仔细检查了原型中的每个控件,并且没有看到任何配置.我添加约束时出现问题UITableViewCell
.我在单元格中有以下代码:
-(void)updateConstraints {
[super updateConstraints];
//first remove old constraints
[self removeConstraints:self.constraints];
[self.nameLabel removeConstraints:self.nameLabel.constraints];
[self.addressLabel removeConstraints:self.nameLabel.constraints];
[self.rentableSquareFeetLabel removeConstraints:self.rentableSquareFeetLabel.constraints];
[self.lastSaleAmountLabel removeConstraints:self.lastSaleAmountLabel.constraints];
[self.lastSaleDateLabel removeConstraints:self.lastSaleAmountLabel.constraints];
[self.thumbnailImageView removeConstraints:self.thumbnailImageView.constraints];
//then set up constraints
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(_thumbnailImageView, _nameLabel, _rentableSquareFeetLabel, _lastSaleAmountLabel, _addressLabel, _lastSaleDateLabel);
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_thumbnailImageView(60)]-[_nameLabel(<=200)]-(>=8)-[_rentableSquareFeetLabel]-(>=8)-[_lastSaleAmountLabel]|" options:0 metrics:nil views:viewsDictionary]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[_nameLabel]-(-4)-[_addressLabel]" options:NSLayoutFormatAlignAllLeading metrics:nil views:viewsDictionary]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[_lastSaleAmountLabel]-(-4)-[_lastSaleDateLabel]" options:NSLayoutFormatAlignAllLeading metrics:nil views:viewsDictionary]];
}
Run Code Online (Sandbox Code Playgroud)
我在调试控制台中收到以下内容.该异常由第一个addConstraints行触发.如果我只是继续通过那些,那么最终一切都显示应该是,因为看起来xcode正在选择打破正确的约束:
2013-09-25 15:07:14.169 PECProperties[32381:a0b] Unable to simultaneously satisfy constraints. Probably at least …
Run Code Online (Sandbox Code Playgroud) 我有原型单元的tableview,在单元格中我有imageview和一些文本.文本标签是原型单元格中的一个,但有时它不止一行,我在服务器调用后将数据加载到表视图中.故事板行中的标签设置为0,换行符设置为Word Wrap.我也试过http://candycode.io/automatically-resizing-uitableviewcells-with-dynamic-text-height-using-auto-layout/
但没有效果.如果我在UITableView中使用自动布局用于动态单元格布局和变量行高度 一切正常,因为标签文本是预定义的,但是我从服务器加载数据并在API调用后重新加载tableView,然后标签就是一条线.
我正在尝试实现一个UITableView,其行为与twitter客户端的时间轴类似.现在我只是想在UITableViewCell中获得两个标签.根据Stack Overflow的回答,我为每个布局使用了不同的reuseIdentifier.我的布局很简单,由单个标签或两个标签组成.最终我将调整UITableViewCells的高度,但首先我需要填充内容的单元格.
如果我设置框架initWithFrame:
,我可以显示标签,但是约束没有实现.
问题:什么阻止标签和约束出现?我在UITableViewCell的实现中显然遗漏了一些东西,但我不知道它是什么.
次要问题:我是否为每个reuseIdentifier正确注册了UITableViewCell类viewDidLoad
?
这可能会遇到困难,但Interface Builder会让我感到困惑,我想在代码中实现这一点.
以下是名为TVTCell.h的自定义UITableViewCell的代码:
static NSString * const kCellIDTitle = @"CellWithTitle";
static NSString * const kCellIDTitleMain = @"CellWithTitleMain";
@interface TVTCell : UITableViewCell
{
NSString *reuseID;
}
@property (nonatomic, strong) UILabel *nameLabel;
@property (nonatomic, strong) UILabel *mainLabel;
@end
Run Code Online (Sandbox Code Playgroud)
和TVTCell.m:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
reuseID = reuseIdentifier;
nameLabel = [[UILabel alloc] init];
[nameLabel setTextColor:[UIColor blackColor]];
[nameLabel setBackgroundColor:[UIColor colorWithHue:32 saturation:100 brightness:63 alpha:1]];
[nameLabel setFont:[UIFont …
Run Code Online (Sandbox Code Playgroud) 在下面的代码中,调用这四种方法进行布局推理.我有点困惑为什么所有这些都是需要的,以及它们彼此不同的做法.它们在过程中用于通过自动布局使单元格的高度变为动态.(来自该库从这个问题.)
[cell setNeedsUpdateConstraints];
[cell updateConstraintsIfNeeded];
[cell.contentView setNeedsLayout];
[cell.contentView layoutIfNeeded];
Run Code Online (Sandbox Code Playgroud)
它来自这个单元格高度的代码块:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
RJTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
[cell updateFonts];
NSDictionary *dataSourceItem = [self.model.dataSource objectAtIndex:indexPath.row];
cell.titleLabel.text = [dataSourceItem valueForKey:@"title"];
cell.bodyLabel.text = [dataSourceItem valueForKey:@"body"];
cell.bodyLabel.preferredMaxLayoutWidth = tableView.bounds.size.width - (kLabelHorizontalInsets * 2.0f);
[cell setNeedsUpdateConstraints];
[cell updateConstraintsIfNeeded];
[cell.contentView setNeedsLayout];
[cell.contentView layoutIfNeeded];
CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
return height;
}
Run Code Online (Sandbox Code Playgroud)
但他们的做法有何不同?他们为什么都需要?
我以编程方式创建的表格视图单元格未根据其自定义视图的内在内容高度进行大小调整,即使我正在使用UITableViewAutomaticDimension
并设置顶部和底部约束.
问题可能在于我的UITableViewCell
子类实现.请参阅下面的代码"无法以编程方式工作">"代码">"MyCustomCell.swift".
我正在尝试为自定义蒙古语键盘制作一个建议栏.蒙古文是垂直写的.在Android中它看起来像这样:
我已经知道我应该使用一个UITableView
可变单元格高度,从iOS 8开始可以使用.这需要使用自动布局并告诉表格视图使用单元格高度的自动尺寸.
我一直在学习的一些事情在我最近的SO问题和答案中有所体现:
所以我已经达到了支持内在内容大小的垂直标签.这些标签放在我的自定义表格视图单元格中.并且如下一节所述,它们在我在故事板中执行时起作用,但在我以编程方式创建所有内容时则不起作用.
为了隔离问题,我创建了两个基本项目:一个用于我使用故事板的地方,另一个用于以编程方式执行所有操作.故事板项目有效.从下图中可以看出,每个表格视图单元格都会调整大小以匹配自定义垂直标签的高度.
在IB
我设置约束来固定顶部和底部以及使标签居中.
码
ViewController.swift
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
let myStrings: [String] = ["a", "bbbbbbb", "cccc", "dddddddddd", "ee"]
let cellReuseIdentifier = "cell"
@IBOutlet var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableViewAutomaticDimension
}
// number of rows in …
Run Code Online (Sandbox Code Playgroud) 我有一个UITableView
填充了自定义单元格(继承自UITableViewCell
),每个单元格包含一个UIWebView
根据它的内容自动调整大小.这就是问题,如何UITableView
根据内容(变量webView
)更改单元格的高度.
解决方案必须是动态的,因为用于填充的HTML UIWebViews
是从不断变化的Feed中解析的.
我有一种感觉,我需要使用UITableView
委托方法,heightForRowAtIndexPath
但从它的定义:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
;//This needs to be variable
}
Run Code Online (Sandbox Code Playgroud)
我无法访问单元格或其内容.我可以更改单元格的高度cellForRowAtIndexPath
吗?
任何帮助都会很棒.谢谢.
两年多前我问过这个问题.通过自动布局的介绍,可以找到iOS7的最佳解决方案:
在iOS8上,此功能内置于SDK中
如何让UITableView行高自动调整大小到UITableViewCell的大小?
因此,假设我在Interface Builder中创建UITableViewCell,并且它的高度超过标准大小,我如何才能将UITableView行高度自动调整为它?(即与手动必须在界面构建器中测量高度而不是以编程方式设置它相反)
我在UITableView上遇到了一个非常奇怪的问题.我有一些不同的单元格,我想在类似新闻源的表视图上显示.
我重用后我的细胞有问题.单元格包含两个图像,两个标签和一个带共享/喜欢/注释按钮的视图.我会尝试绘制它,但我不确定它会漂亮:
-------------------------------------------------
| | __ ____________________________ |
| | |_2| | | |
| | | 3 | |
| | | | |
| 1 | |____________________________| |
| | |
| |_______________________________________|
| | |
| | 4 |
|_______|_______________________________________|
| |
| 5 |
|_______________________________________________|
1 : objectImage
2 : subjectImage
3 : titleLabel
4 : commentLabel
5 : actionsView
Run Code Online (Sandbox Code Playgroud)
我的约束是:
"H:|-0-[objectImage(60)]-7-[subjectImage(30)]-7-[titleLabel]-7-|"
"H:|-0-[objectImage(60)]-0-[commentLabel]-0-|"
"H:|-0-[actionsView]-0-|"
"V:|-0-[objectImage(>=35)]-0-[actionsView(44)]-0-|"
"V:|-7-[subjectImage(30)]"
"V:|-7-[titleLabel(>=46)]-7-[commentLabel(>=35)]-0-[actionsView(44)]-0-|"
Run Code Online (Sandbox Code Playgroud)
每次绘制单元格时,我都会更改此约束:
"V:[commentLabel(%0.2f)]"
Run Code Online (Sandbox Code Playgroud)
细胞第一次完美展示.
但是,我遇到的问题是,在某些时候,经过一些重用(我不能每次都重现它),应用程序因为一个约束问题而崩溃.这是一个例外:
"<NSLayoutConstraint:0x205a75b0 V:[UILabel:0x1ef31430(105)]>",
"<NSLayoutConstraint:0x1ef34440 V:[UILabel:0x1ef31430]-(0)-[UIView:0x1ef2fe50]>",
"<NSLayoutConstraint:0x1ef34380 …
Run Code Online (Sandbox Code Playgroud) ios ×9
uitableview ×9
autolayout ×4
objective-c ×4
swift ×3
ios8 ×2
iphone ×2
autosize ×1
cocoa-touch ×1
constraints ×1
height ×1
storyboard ×1
uiview ×1