相关疑难解决方法(0)

使用UITableViewCell子类执行-layoutSubviews后仍需要"自动布局"

使用XCode 4.5和iOS 6,我正在开发一个带有自定义单元格的简单表视图的应用程序.我已经在iOS 5及以下版本中完成了这一百次,但由于某种原因,新的autoLayout系统给了我很多麻烦.

我在IB中设置了我的表格视图和原型单元格,添加了子视图并将它们连接起来作为IBOutlets然后设置我的委托和dataSource.但是现在每当从第一个单元格中取出时cellForRowAtIndexPath,我都会收到以下错误:

***断言失败 - [ShopCell layoutSublayersOfLayer:],/ SourceCache/UIKit_Sim/UIKit-2372/UIView.m:5776

***由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'执行-layoutSubviews后仍需要自动布局.ShopCell的-layoutSubviews实现需要调用super.

我没有在我的子类化单元格(ShopCell)中实现-layoutSubviews方法,即使我尝试这样做并添加超级调用,因为它表明我仍然得到相同的错误.如果我从IB中的单元格中删除子视图,并将其更改为标准的UITableViewCell,一切都按预期工作,但当然我的单元格中没有数据.

我几乎可以肯定,我有一些简单的东西,但我找不到任何文件或指南来暗示我做错了什么.任何帮助,将不胜感激.

编辑:只是尝试将其更改为IB中的UITableViewCell并保留所有子视图,仍然是相同的错误.

objective-c ios autolayout xcode4.5

115
推荐指数
10
解决办法
5万
查看次数

如何使用autolayout设置tableHeaderView(UITableView)的高度?

在过去的3到4个小时里,我一直把头撞在墙上,我似乎无法弄明白.我有一个UIViewController,里面有一个全屏UITableView(屏幕上有一些其他的东西,这就是为什么我不能使用UITableViewController)我想让我的tableHeaderView用autolayout调整大小.不用说,它不合作.

见下面的截图.

在此输入图像描述

因为overviewLabel(例如"此处列出概述信息."文本)具有动态内容,所以我使用autolayout来调整它的大小和它的超级视图.除了tableHeaderView之外,我已经很好地调整了所有内容,它位于层次结构中的Paralax Table View之下.

我发现调整标题视图大小的唯一方法是以编程方式,使用以下代码:

CGRect headerFrame = self.headerView.frame;
headerFrame.size.height = headerFrameHeight;
self.headerView.frame = headerFrame;
[self.listTableView setTableHeaderView:self.headerView];
Run Code Online (Sandbox Code Playgroud)

在这种情况下,headerFrameHeight是tableViewHeader高度的手动计算,如下所示(innerHeaderView是白色区域,或者第二个"View",headerView是tableHeaderView):

CGFloat startingY = self.innerHeaderView.frame.origin.y + self.overviewLabel.frame.origin.y;
CGRect overviewSize = [self.overviewLabel.text
                       boundingRectWithSize:CGSizeMake(290.f, CGFLOAT_MAX)
                       options:NSStringDrawingUsesLineFragmentOrigin
                       attributes:@{NSFontAttributeName: self.overviewLabel.font}
                       context:nil];
CGFloat overviewHeight = overviewSize.size.height;
CGFloat overviewPadding = ([self.overviewLabel.text length] > 0) ? 10 : 0; // If there's no overviewText, eliminate the padding in the overall height.
CGFloat headerFrameHeight = ceilf(startingY + overviewHeight + overviewPadding + 21.f + 10.f);
Run Code Online (Sandbox Code Playgroud)

手动计算有效,但如果将来发生变化,它会很笨拙并容易出错.我想要做的是让tableHeaderView根据提供的约束自动调整大小,就像你可以在其他地方一样.但对于我的生活,我无法弄明白.

关于这个问题有几个关于此的帖子,但没有一个是明确的,最后让我更加困惑.这里有几个:

uitableview ios autolayout ios7

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

使用自动布局,IB和字体大小时,表头视图高度是错误的

我正在尝试为我的uiTableView创建一个标题视图(不是节标题,我已经有了.)我在界面构建器中设置了一个XIB.所有的连接都连接起来,它运行得很漂亮......除了桌子没有足够的空间!我的问题是表的顶部稍微重叠了表的标题.

我的XIB设置为所有按钮的自动布局,IB很高兴约束不会发生冲突/模糊.视图设置为自由形式大小,在我的情况下最终为320 x 471.然后在视图的约束中,我为视图设置了内在大小.

现在这与我的桌子完美搭配.一切看起来都很棒.但是如果我用代码手动更改标题视图中的任何字体,布局会使视图变大,最终会在我的表格下面.

任何想法如何让tableviewcontroller在设置字体和大小后留下足够的空间用于标题视图?我希望我有理由解释这一点.

objective-c uitableview ios autolayout

34
推荐指数
5
解决办法
3万
查看次数

UITableView:以编程方式更改页脚视图的大小不起作用

我的表格视图的页脚是一个显示来自用户的一些推文的视图,所以在得到推文之前我不知道它的高度,我创建了一个FooterViewController有方法refreshTweets,我添加它viewDidLoad:

FooterViewController *controller = [[FooterViewController alloc] initWithNibName...];
[[self tableView] setFooterView:[controller view]];
[controller refreshTweets];
Run Code Online (Sandbox Code Playgroud)

refreshTweets方法中,我阅读推文并计算总高度,并重置视图(页脚)的高度:

self.view.frame = newFrame;
Run Code Online (Sandbox Code Playgroud)

但它没有意义,页脚的高度仍然是我在Interface Builder中设置的高度,是否有任何遗漏或任何替代方法这样做?

谢谢!

编辑:我可以在界面构建器中将视图的大小更改为足够小,并且在计算推文的高度和设置view.frame后它会被放大,但是表格视图仍然认为其页脚具有先前的高度,即额外的空间在桌面视图之外,如果我将桌子向上拖动,我只能看到它.

footer frame uitableview uiview tweets

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

动态设置tableHeaderView高度

我的应用程序创建了一个UITableViewController,它包含一个可能具有任意高度的自定义tableHeaderView.我一直在努力设置动态设置此标头,因为似乎建议的方法是缩短此标头.我的UITableViewController的相关代码:

import UIKit
import SafariServices

class RedditPostViewController: UITableViewController, NetworkCommunication, SubViewLaunchLinkManager {

    //MARK: UITableViewDataSource
    var post: PostData?
    var tree: CommentTree?
    weak var session: Session! = Session.sharedInstance

    override func viewDidLoad() {
        super.viewDidLoad()

        // Get post info from api
        guard let postData = post else { return }

        //Configure comment table
        self.tableView.registerClass(RedditPostCommentTableViewCell.self, forCellReuseIdentifier: "CommentCell")

       let tableHeader = PostView(withPost: postData, inViewController: self)
       let size = tableHeader.systemLayoutSizeFittingSize(UILayoutFittingExpandedSize)
       let height = size.height
       let width = size.width
       tableHeader.frame = CGRectMake(0, 0, width, height)
       self.tableView.tableHeaderView = tableHeader


       session.getRedditPost(postData) …
Run Code Online (Sandbox Code Playgroud)

ios autolayout swift

20
推荐指数
4
解决办法
3万
查看次数

在tableHeaderView中使用autolayout

我有一个UIView包含多行的子类UILabel.此视图使用autolayout.

在此输入图像描述

我想设置该视图为tableHeaderViewUITableView(不是一节头).此标题的高度取决于标签的文本,而标签的文本又取决于设备的宽度.那种场景自动布局应该很棒.

我发现并尝试 许多 解决方案来实现这一点,但无济于事.我试过的一些事情:

  • preferredMaxLayoutWidth在期间为每个标签设置一个layoutSubviews
  • 定义一个 intrinsicContentSize
  • 试图找出视图所需的大小并tableHeaderView手动设置框架.
  • 设置标头时向视图添加宽度约束
  • 一堆其他的东西

我遇到的一些各种失败:

  • 标签超出视图的宽度,不包裹
  • 帧的高度为0
  • 应用程序崩溃异常 Auto Layout still required after executing -layoutSubviews

解决方案(或解决方案,如有必要)应适用于iOS 7和iOS 8.请注意,所有这些都是以编程方式完成的.我已经设置了一个小型示例项目,以防您想要查看问题.我已将我的努力重置到以下起点:

SCAMessageView *header = [[SCAMessageView alloc] init];
header.titleLabel.text = @"Warning";
header.subtitleLabel.text = @"This is a message with enough text to span multiple lines. This text is set at runtime and might be short or long.";
self.tableView.tableHeaderView = header; …
Run Code Online (Sandbox Code Playgroud)

uitableview uiview ios autolayout nslayoutconstraint

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

如何创建UITableView标题,其高度由其标签的高度决定?

我想在tableView中添加一个标题.此标头包含1个UILabel.标题高度应根据标签所具有的行数计算.

在我的代码中,我正在添加标签<>标头的所有边缘的约束.这是我的尝试:

    //Add header to tableView
    header = UIView()
    header.backgroundColor = UIColor.yellowColor()
    tableView!.tableHeaderView = header

    //Create Label and add it to the header
    postBody = UILabel()
    postBody.text = "The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog."
    postBody.font = UIFont(name: "Lato-Regular", size: 16.0)
    postBody.numberOfLines = 0
    postBody.backgroundColor = FlatLime()
    header.addSubview(postBody)

    //Enable constraints for each item
    postBody.translatesAutoresizingMaskIntoConstraints = false
    header.translatesAutoresizingMaskIntoConstraints = false

    //Add …
Run Code Online (Sandbox Code Playgroud)

ios swift

12
推荐指数
3
解决办法
795
查看次数

viewForHeaderInSection autolayout - 引脚宽度

我正在使用UITableView委托方法viewForHeaderInSection在我的提供节标题UITableView.

我最初创建一个这样的视图:

UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 50)];
Run Code Online (Sandbox Code Playgroud)

然后使用Autolayout添加一些子视图,然后返回 headerView

我遇到的问题是我不想具体指定headerView大小.我想使用Autolayout将左右边缘固定到视图的宽度.这是问题,我没有在Autolayout代码中使用的superview.

使用上面的代码,意味着标题视图不会在旋转时自动调整大小.您必须在轮换后重新加载tableview.

我有什么想法可以设置headerView它的边缘到tableview?

谢谢

objective-c uitableview ios autolayout

5
推荐指数
1
解决办法
2495
查看次数