标签: autolayout

UITableViewCell的contentView获得了不需要的"height == 44"约束

我完全在代码中创建我的UI,并使用Masonry将单元格的内容视图的子视图约束到适当的高度.我正在使用

[cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height
Run Code Online (Sandbox Code Playgroud)

在iOS 7上的行高,而iOS 8自动处理它.

所有东西看起来都应该在屏幕上显示,但是在控制台中我得到了大量的警告,用于冲突的约束,这些都似乎是由于单元内容视图上的未经处理和不必要的高度约束(例如<NSLayoutConstraint UITableViewCellContentView.height == 44>).

在iOS 8上,我将表视图设置rowHeightUITableViewAutomaticDimension(有效-1),但我仍然得到这个约束.我只在内容视图和它自己的子视图之间添加约束,因此内容视图和单元格本身之间没有约束.

知道这个约束来自哪里以及如何让它消失?

编辑:现在我实际上找到了各种各样的"解决方案" - 最初将内容视图的框架设置为荒谬的东西,比如CGRectMake(0, 0, 99999, 99999),在添加子视图或约束之前,似乎会使警告消失.但这并不是正确的方式,所以有人能说出更好的方法吗?

uitableview ios autolayout

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

剩余空间中的自动布局居中视图(以编程方式)

如何以编程方式添加自动布局约束以使剩余空间中的视图居中(请参见下面的示例图片)?

在此输入图像描述

目前,我在底部添加了一个容器视图,然后我将视图置于容器视图中心,但我想知道是否有其他解决方案而不需要使用容器视图.

iphone ios autolayout

21
推荐指数
1
解决办法
2891
查看次数

UITableView中的动态UIImageView大小

我想用一个显示图像的Custom TableViewCell实现一个TableView.

为了简单起见,我简单地使用autolayout将UIImageView放在tableviewcell中(如下图所示). 在此输入图像描述

我想要的是在UIImageView中显示图像,但是那些图像尺寸可以是任何东西并且是不一致的(肖像,风景,方形)......

因此,我希望显示具有固定宽度(设备宽度)的图像和相对于图像比例的动态高度.我想要这样的东西:
在此输入图像描述

遗憾的是,我无法达到这一结果.

以下是我实现它的方式 - (我使用Haneke从URL加载图像 - 存储在Amazon S3中的图像):

class TestCellVC: UITableViewCell {

    @IBOutlet weak var selfieImageView: UIImageView!
    @IBOutlet weak var heightConstraint: NSLayoutConstraint!

    func loadItem(#selfie: Selfie) {        
        let selfieImageURL:NSURL = NSURL(string: selfie.show_selfie_pic())!

        self.selfieImageView.hnk_setImageFromURL(selfieImageURL, placeholder: nil, format: HNKFormat<UIImage>(name: "original"), failure: {error -> Void in println(error)
            }, success: { (image) -> Void in
                // Screen Width
                var screen_width = UIScreen.mainScreen().bounds.width

                // Ratio Width / Height
                var ratio =  image.size.height / image.size.width

                // Calculated Height for the picture
                let newHeight …
Run Code Online (Sandbox Code Playgroud)

uitableview uiimageview ios autolayout swift

21
推荐指数
3
解决办法
2万
查看次数

Xcode 9中的自定义表格查看单元格

我有一个UITableViewController使用Xcode 8和Swift 3正确调整单元格大小的位置.现在我正在使用Xcode 9和Swift 4,它们不会扩展,只使用默认高度44.

(我每个人都有一两句话UITableViewCell)

我以前用过这个:

// MARK: - Table view delegate

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}
Run Code Online (Sandbox Code Playgroud)

...但是能够对其进行评论,因为根据iOS 11更新你的应用程序说默认会自动调整大小:

在此输入图像描述

我已经尝试过将部署目标更改为iOS 11,在Storyboard中玩游戏(但我使用的是Table View Cell样式Basic,所以没有太多AutoLayout要做),我无法弄清楚是什么正在进行.

我将UILabel标题设置为0行,并且具有换行字换行,但仍然没有得到任何接近于根据Xcode 9中的文本内容扩展单元格.任何想法?

谢谢!

编辑:

这是固定的选项(我没有),因为它是一个基本单元格:

在此输入图像描述

在此输入图像描述

在此输入图像描述

xcode uitableview ios autolayout swift

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

Swift安全区域布局指南和可视格式语言

我想使用Apples可视化格式语言将视图约束到iOS 11中的新安全区域布局指南.但是,我得到一个例外:

- [NSLayoutYAxisAnchor nsli_superitem]:无法识别的选择器发送到实例0x1c447ed40

    //Make View Dictionary
    var views: [String: Any] = ["left": self.leftContainer]

    //Check swift version and add appropriate piece to the view dictionary
    if #available(iOS 11, *) {
        views["topGuide"] = self.view.safeAreaLayoutGuide.topAnchor
    }else{
        views["topGuide"] = self.topLayoutGuide
    }

    //Make the constraint using visual format language
    let leftVertical = NSLayoutConstraint.constraints(withVisualFormat: "V:[topGuide][left]|", options: [], metrics: nil, views: views)

    //Add the new constraint
    self.view.addConstraints(vertical)
Run Code Online (Sandbox Code Playgroud)

我喜欢可视化格式语言的原因是因为在某些情况下你可以用更少的代码添加很多约束.

有任何想法吗?

autolayout visual-format-language swift ios11 safearealayoutguide

21
推荐指数
3
解决办法
8424
查看次数

UITableViewCellContentView高度与heightForRowAtIndexPath的高度有何不同:

我在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)

uitableview ios autolayout nslayoutconstraint

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

在超级视图中嵌入视图而不会丢失自动布局约束

在ios应用程序中,我有一个自定义的UITableViewCell,里面有很多视图.我正在使用自动布局并根据需要设置所有约束.

但现在我需要有一个主视图(在内容视图中)并将所有其他视图放入其中(某种父视图).

这是我的单元格在界面构建器中的外观示例:

在此输入图像描述

它具有使用约束设置的所有视图.

我知道有一个xcode功能可以在父视图中嵌入选定的视图:

在此输入图像描述

所以我选择所有视图并选择将它们嵌入到视图中.我得到以下内容:

在此输入图像描述

我的问题

尽管视图已在superview中正确嵌入,但自动布局约束已被删除,现在我必须重新创建它们.

有没有办法可以将所有视图放在superview中并具有相同的自动布局约束,而无需重新创建它们?谢谢

iphone interface-builder uiview ios autolayout

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

框架"在运行时会有所不同"....这不是重点吗?

也许争取一个"无警告"项目是徒劳的,但我对自适应布局/自动布局很紧张,我不得不尝试并压制这些警告.

我有一个uiview,我希望根据纵向屏幕宽度动态调整大小.我的应用程序设置在通用的构建信息,仅限肖像(和颠倒).我通过以下方式限制了uiview:

  1. 将视图中心与Superview的X中心对齐
  2. 使视图的宽度与Superview的宽度成比例
  3. 使视图的宽高比约束为1:1
  4. 鉴于视图对superview顶部的垂直约束

有关详细信息,请参阅下面的截图.

所以现在我得到关于视图"框架在运行时不同"的警告,特别是运行时的大小和位置与画布中的大小和位置.不确定为什么Xcode"关心"类的大小设置为任何高度和任何宽度的画布.我认为自适应布局的重点在于根据设备屏幕尺寸和方向在运行时解析尺寸和位置.

如果我崩溃并让Xcode"更新帧"......是的,警告消失了,但是对于超大视图,几乎不可能以所见即所得的方式在小画布上以图形方式工作.这里解决警告的任何解决方案都没有创建超大视图,这使得在画布内工作几乎不可能?

画布截图

xcode ios autolayout adaptive-layout

20
推荐指数
3
解决办法
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万
查看次数

如何根据打字文本增加文本字段的宽度?

我需要根据文本字段的内容增加文本字段的宽度.当用户输入文本时,文本字段大小应自动增加.我在这个文本字段旁边有一个关闭(X)按钮.

我已经约束了文本字段和按钮,以便文本字段在屏幕上居中,并且按钮与它相邻.(文本字段应该是可编辑的,按钮应该是可点击的)

文本字段大小是这样的:

在此输入图像描述

当我在其中输入文本时,大小应自动增加:

在此输入图像描述

我怎样才能做到这一点?

uitextfield ios autolayout swift

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