相关疑难解决方法(0)

tableview:heightForRowAtIndexPath:使用AutoLayout报告内容视图的大小不正确

我有一个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上适当调整大小?

uitableview autolayout ios7

7
推荐指数
1
解决办法
2151
查看次数

基于视图的NSTableView,使行高取决于内容

我需要一点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)

cocoa objective-c interface-builder nstableview xcode5

7
推荐指数
1
解决办法
2303
查看次数

使用UITableViewAutomaticDimension时UITableViewCell高度错误

我使用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)

结果如下:

滚动后:

uitableview ios autolayout

7
推荐指数
1
解决办法
6742
查看次数

从Storyboard加载自定义UITableViewCell

目前我正在使用故事板的自动布局来动态调整自定义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并创建一个引用单元作为属性吗?

我需要参考单元用于尺寸调整.

谢谢你的帮助.

uitableview ios heightforrowatindexpath autolayout

6
推荐指数
1
解决办法
2万
查看次数

boundingRectWithSize忽略换行符

我正在尝试创建一个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 nsstring ios

6
推荐指数
1
解决办法
1109
查看次数

动态TableViewCell高度以适合下载的图像

我正在回答这个问题:在UITableView中使用自动布局来获得动态单元格布局和可变行高,但它缺少两件让我无法完成它的事情:

  1. 我在Storyboard原型单元格中设置了约束,而不是以编程方式
  2. 图像下载完成异步.

基本上我正在下载图像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)

objective-c uitableview ios

6
推荐指数
1
解决办法
3244
查看次数

UITableView动态单元格高度在转换或旋转时中断

目前我正忙着快​​速和动态的表格单元格高度.我在xcode6.1上为iOS8.1开发了一个简单的应用程序:https: //github.com/ArtworkAD/DynamicCellTest

因此,要实现细胞高度随细胞内容延伸,我会执行以下操作:

  • 在storyboard中将标签行设置为0
  • 将标签字体设置为系统
  • 为单元格中的标签设置约束
  • self.tableView.rowHeight = UITableViewAutomaticDimension
  • 不要覆盖heightForRowAtIndex方法

需要最少的代码:

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)

uitableview ios autolayout swift

6
推荐指数
1
解决办法
5438
查看次数

Swift - 以编程方式创建垂直UIScrollView

我一直在寻找一个(工作)教程的日子,甚至是一个使用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)

任何想法为什么这不起作用?

uiscrollview ios swift

6
推荐指数
2
解决办法
1万
查看次数

将保证金添加到UITableViewCell

我试图实现一个我在草图上嘲笑的观点.我在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)

和故事板视图 的UITableViewCell

任何帮助,将不胜感激.谢谢

输出:

OutPut图像

uitableview ios swift

6
推荐指数
1
解决办法
1万
查看次数

是否应将UICollectionViewCell子类的contentView.translatesAutoResizingMaskToConstraints设置为"false"?

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 autolayout uicollectionview uicollectionviewcell

6
推荐指数
1
解决办法
1686
查看次数