我有一个UITableViewCell使用AutoLayout的自定义标签.它的约束是通过内容视图的常量前导,尾随,底部和顶部空间设置的.这些单元格出现的表视图控制器位于a UISplitViewController.加载表视图时,我使用以下代码计算单元格的高度:
CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
CGFloat height = size.height;
Run Code Online (Sandbox Code Playgroud)
在肖像中,这允许我正确显示单元格.以下是部分单元格的屏幕截图:

但是,当我将iPad旋转到横向时,它不会计算正确的尺寸并最终填充太多:

tableview:heightForRowAtIndexPath:在旋转内容视图的大小时调用时设置断点未正确报告.事实上,它报告了表视图的旧的,更窄的大小.
如何让我的细胞UISplitViewController在iPad上适当调整大小?
我需要一点NSTableView和动态行高的帮助
是)我有的:
基于单列视图的NSTableVIew绑定到数组控制器.每个NSTableCellView包含三个子视图:NSImageView,NSTextField(单行)和NSTextField(多行).基本上,这是一个聊天界面,所以你会有一个消息,发件人和头像的列表.
我想要实现的目标:
当文本长于行的最小高度时,行会展开以适合内容.就像iMessage一样,气泡扩展到适合消息.
......这似乎是一件非常自然的事情,但是我在网上找到的所有相关解决方案(参考文献1,参考文献2),其中没有一个对我有用.
Ref 2看起来很奇妙,但这些都不适用于我的应用程序,因为示例项目使用第三方自动布局代码,整个内容是为iOS设计的.参考文献1提供了一个非常有前途的解决方案,用英语写成.我尝试使用解决方案中描述的"虚拟视图"进行设置,但未能正确地更改和测量高度.
这是我的代码tableView:heightOfRow:,_samplingView是虚拟视图,它具有工作约束并且与中的相同tableView.
- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row
{
NSTextField *textField;
NSTextFieldCell *messageCell;
for (NSView *subview in [_samplingView subviews]) {
if ([[subview identifier] isEqualToString:@"message"]) {
textField = (NSTextField*)subview;
messageCell = ((NSTextField*)subview).cell;
}
}
Message *message = [[_messagesArrayController arrangedObjects] objectAtIndex:row];
_samplingView.objectValue = message;
CGFloat width = [[[tableView tableColumns] objectAtIndex:1] width];
[_samplingView setBounds:NSMakeRect(0, 0, width, CGFLOAT_MAX)];
[_samplingView display];
CGFloat optimalHeight = 10 + [messageCell cellSize].height; //messageCell's size …Run Code Online (Sandbox Code Playgroud) 我使用2个多线标签制作自定义单元格,并将此标签固定到所有边.当在-tableView:heightForRowAtIndexPath:用于iOS的> = 8我返回UITableViewAutomaticDimension.但是当表视图出现时,单元格高度应该比应该大.向下滚动然后向上滚动单元格取正常高度.如何解决这个问题?
高度代码:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) {
return UITableViewAutomaticDimension;
}
static CCTopicTableViewCell *cell;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
cell = [tableView dequeueReusableCellWithIdentifier:@"topicCellIdentifier"];
});
cell.topic = [self.topics topicAtIndexPath:indexPath];
cell.bounds = CGRectMake(0, 0, CGRectGetWidth(self.tableView.bounds), CGRectGetHeight(cell.bounds));
[cell setNeedsLayout];
[cell layoutIfNeeded];
CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
return size.height + 1;
}
Run Code Online (Sandbox Code Playgroud)
结果如下:

滚动后:

目前我正在使用故事板的自动布局来动态调整自定义UITableViewCell的大小.除了滚动时存在内存泄漏外,一切都正常工作.
我知道问题来自于打电话
[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
Run Code Online (Sandbox Code Playgroud)
从内部
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)
我的问题是,创建参考单元的最佳方法是什么?如何从故事板加载单元格dequeueReusableCellWithIdentifier?
可以dequeueReusableCellWithIdentifier从中调用viewDidLoad并创建一个引用单元作为属性吗?
我需要参考单元用于尺寸调整.
谢谢你的帮助.
我正在尝试创建一个UITableViewCell包含a的内容UITextView,当用户在textview中输入文本时,单元格应相应增长.到目前为止,这也很有效,除了该boundingRectWithSize方法在计算新单元格大小时忽略尾随换行符.这是我的方法调用的样子:
CGRect rect = [text boundingRectWithSize:CGSizeMake(self.cellSize.width, CGFLOAT_MAX)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:[UIFont fontWithName:@"AvenirNext-Medium" size:14.0]}
context:nil];
Run Code Online (Sandbox Code Playgroud)
如果我例如输入
Test
\n
\n
Run Code Online (Sandbox Code Playgroud)
(换行符可视化为"\n"),该方法返回包含两行而不是三行的textview的大小.我尝试了几个options和als,attributes但找不到有效的解决方案.我怎样才能以正常的方式做到这一点?
我正在回答这个问题:在UITableView中使用自动布局来获得动态单元格布局和可变行高,但它缺少两件让我无法完成它的事情:
基本上我正在下载图像SDWebImage,并调整其UIImageView高度,以便显示整个图像(当然按比例缩小).我遇到的问题在下面的代码中得到了评论:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// dequeue cell using identifier
[cell.pictureView sd_setImageWithUrl:myUrl completed:^( ... block ...) {
// This code will scale down the UIImage to the UIImageView's width maitaining
// its aspect ratio, and also will resize the UIImageView's to match the scaled-down UIImage's height
if(image != nil) {
CGSize imageSize = [image size];
CGSize imageViewSize = CGSizeMake(280.0, 100.0);
CGFloat correctHeight = (imageViewSize.width / imageSize.width) * imageSize.height; …Run Code Online (Sandbox Code Playgroud) 目前我正忙着快速和动态的表格单元格高度.我在xcode6.1上为iOS8.1开发了一个简单的应用程序:https: //github.com/ArtworkAD/DynamicCellTest
因此,要实现细胞高度随细胞内容延伸,我会执行以下操作:
self.tableView.rowHeight = UITableViewAutomaticDimensionheightForRowAtIndex方法需要最少的代码:
class MyTableViewController: UITableViewController {
var entries:Array<String> = [String]()
override func viewDidLoad() {
super.viewDidLoad()
//create dummy content
var i = 0
while i < 10 {
entries.append("\(i) Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor")
entries.append("\(i+1) Lorem ipsum dolor sit amet")
i = i + 2;
}
self.tableView.rowHeight = UITableViewAutomaticDimension
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int …Run Code Online (Sandbox Code Playgroud) 我一直在寻找一个(工作)教程的日子,甚至是一个使用UIScrollView垂直滚动的示例应用程序,这是编程的.有很多关于使用故事板的教程,让我感到茫然.
我查看了苹果的文档,他们的"指南"仍然没有一个坚实的例子或暗示从哪里开始.
我到目前为止所尝试的是做了以下一些事情.
让我的视图成为一个直接在课堂上的scrollview
let scrollView = UIScrollView(frame: UIScreen.mainScreen().bounds)
Run Code Online (Sandbox Code Playgroud)
然后将其分配给我的viewDidLoad函数中的视图
self.view = scollView
Run Code Online (Sandbox Code Playgroud)
试图更改内容大小.
self.scrollView.contentSize = CGSize(width:2000, height: 5678)
Run Code Online (Sandbox Code Playgroud)
试图启用滚动
scrollView.scrollEnabled = true
Run Code Online (Sandbox Code Playgroud)
以编程方式执行此操作时我能找到的最后一个建议
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
scrollView.frame = view.bounds
}
Run Code Online (Sandbox Code Playgroud)
目前我没有尝试开始将我的对象添加到scrollview,(我不需要缩放,只需要进行垂直滚动),但我没有设法得到任何工作:(事实上,运行应用程序与那些添加只会导致UIProblems,屏幕向上移动奇怪,它不适合我的屏幕的整个宽度?我尝试修复使框架边界等于宽度,但仍然无法正常工作
我没有收到任何错误.
我很想看到一个可以垂直滚动的示例viewcontroller!或任何帮助将非常感谢!
编辑灾难的屏幕截图,尝试使我的视图可滚动导致.
http://i.stack.imgur.com/gQ0SC.png
(链接而不是图像,由于缺少直接放置图像的点.)
(我将滚动视图背景设置为红色,看看它是否显示正确.它似乎是.但我不能滚动到任何地方
正如评论中所建议的那样,我没有使用self.view = self.scrollview,而是尝试将scrollview添加为self.view的子视图,但没有取得积极的结果.
编辑2:
加入
scrollView.contentSize = CGSize(width:2000, height: 5678)
Run Code Online (Sandbox Code Playgroud)
to viewDidLayoutSubviews,如下面的评论中所建议的那样使我的视图可滚动!
然而,由于某种原因,我的布局仍然看起来像一个完全混乱(看起来它应该是,在我使它可滚动之前).
这是我的topBar(蓝色)的示例约束,它应该占据整个水平空间.
self.scrollView.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat(
"H:|[topBar]|", options: nil, metrics: nil, views: viewsDictionary))
Run Code Online (Sandbox Code Playgroud)
任何想法为什么这不起作用?
我试图实现一个我在草图上嘲笑的观点.我在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
}
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.谢谢
输出:
TL; DR
尝试通过自动布局调整UICollectionViewCells的大小时,即使是一个简单的示例,您也可以轻松获得自动布局警告.
我们应该contentView.translatesAutoResizingMaskToConstraints = false摆脱它们吗?
我正在尝试使用自定义自动布局单元格创建UICollectionView .
在viewDidLoad中:
let layout = UICollectionViewFlowLayout()
layout.estimatedItemSize = CGSize(width: 10, height: 10)
collectionView.collectionViewLayout = layout
Run Code Online (Sandbox Code Playgroud)
我的细胞很基础.它是一个宽度和高度为75的蓝色视图,用于测试目的.通过将视图固定到所有4个边上的超视图,并为其指定高度和宽度来创建约束.
class MyCell: UICollectionViewCell {
override init(frame: CGRect) {
view = UIView()
super.init(frame: frame)
view.backgroundColor = UIColor.blueColor()
contentView.addSubview(view)
installConstraints()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
var view: UIView
func installConstraints() {
view.translatesAutoresizingMaskIntoConstraints = false
var c: NSLayoutConstraint
// pin all edges
c = NSLayoutConstraint(item: contentView, attribute: .Leading, relatedBy: …Run Code Online (Sandbox Code Playgroud) ios ×8
uitableview ×7
autolayout ×5
swift ×3
objective-c ×2
cocoa ×1
ios7 ×1
nsstring ×1
nstableview ×1
uiscrollview ×1
xcode5 ×1