草庐IT

ios - UITableView 的动态高度(不是 Cell)

coder 2023-09-09 原文

我正在尝试使用 UITableView 列出用户可用的所有不同 HomeKit 设备。

显然没有办法知道他们有多少台设备,所以我需要更改 Storyboard 中的 UITableView 高度。

我试过这个,我在 viewDidLoad() 函数中调用它:

func adjustHeightOfTableView() {

  //getting the height of the tableview
    var tableHeight = self.tableView.contentSize.height

   //the height of the content inside the view
    var maxHeight = self.tableView.superview?.frame.size.height


    //if the height of the content is bigger then the height of the tableview
    if (maxHeight! > tableHeight) {

        tableHeight = maxHeight!
        //set the tableview height to be the content height

    }

    //trying to reload the tableview height?
    self.view.layoutIfNeeded()
    self.tableView.reloadData()

}

我想在 tableview 下放置一些 UI 元素,我希望它们是从 tableview 底部开始的一个固定空间,但也让 tableview 成为它需要的高度,无论单元格数量是多少有。

但这就是行不通。 如果我做错了什么,或者如果有人知道如何进行这项工作,请告诉我。 谢谢!

最佳答案

注意:对于这种方法,您需要有静态单元格高度或想出一种方法来事先知道内容大小的总高度是多少

假设您正在使用约束,请在您的 UITableView 上创建以下约束(除了前导和尾随!)

将优先级为 750 的高度约束和底部间距约束为 0 添加到您的 super View ,这将是 >= 0 并且优先级为 1000。为此高度约束创建导出您在 UIViewController

中创建

现在,

func adjustHeightOfTableView() {

  //set the height to be equal to the number of elements multiplied by the height of each cell. 
 //or use some logic that allows you to know what content size or space the cells will occupy!
  tableViewHeightConstraint.constant = dataArray.count * rowHeight    

  view.layoutIfNeeded()
}

现在,如果您的 UITableView 高度小于 super View ,没问题!但如果它大于屏幕边界,它将打破高度限制并变为全屏并正常显示内容,就像您期望的 UITableView 一样!

编辑: 即使您使用的是 UIAutomaticRowDimensions,您也可以通过编程方式向 UITableView 添加约束。即

当然,您的所有其他 View 仍然对您的 UITableView 有底部约束。 在您的 Storyboard 中创建一个 UITableView,其中包含 super View 的正常前导、尾随、顶部和底部。获取数据。获取 UITableView 的 contentSize,然后移除底部约束。现在添加一个高度约束,它将是您的 UIScreen.main().bounds.size.heightcontentSize 的最小值。

关于ios - UITableView 的动态高度(不是 Cell),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40778186/

有关ios - UITableView 的动态高度(不是 Cell)的更多相关文章

  1. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  2. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  3. 【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢 - 2

    HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候

  4. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  5. ruby - 在 Ruby 中动态创建数组 - 2

    有没有办法在Ruby中动态创建数组?例如,假设我想遍历用户输入的书籍数组:books=gets.chomp用户输入:"TheGreatGatsby,CrimeandPunishment,Dracula,Fahrenheit451,PrideandPrejudice,SenseandSensibility,Slaughterhouse-Five,TheAdventuresofHuckleberryFinn"我把它变成一个数组:books_array=books.split(",")现在,对于用户输入的每一本书,我想用Ruby创建一个数组。伪代码来做到这一点:x=0books_array.

  6. ruby - 是否可以将 IRB 提示配置为动态更改? - 2

    我想在IRB中浏览文件系统并让提示更改以反射(reflect)当前工作目录,但我不知道如何在每个命令后进行提示更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中试过这个:require'fileutils'includeFileUtilsIRB.conf[:PROMPT][:CUSTOM]={:PROMPT_N=>"\e[1m:\e[m",:PROMPT_I=>"\e[1m#{pwd}>\e[m",:PROMPT_S=>"FOO",:PROMPT_C=>"\e[1m#{pwd}>\e[m",:RETURN=>""}IRB.conf[:PROMPT_MO

  7. ruby - 为什么不能使用类IO的实例方法noecho? - 2

    print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

  8. ruby-on-rails - 只有当不是 nil 时才执行映射? - 2

    如果names为nil,则以下中断。我怎样才能让这个map只有在它不是nil时才执行?self.topics=names.split(",").mapdo|n|Topic.where(name:n.strip).first_or_create!end 最佳答案 其他几个选项:选项1(在其上执行map时检查split的结果):names_list=names.try(:split,",")self.topics=names_list.mapdo|n|Topic.where(name:n.strip).first_or_create!e

  9. ruby-on-rails - carrierwave:在序列化动态属性上安装 uploader - 2

    首先,我使用的是rails3.1.3和来自master的carrierwavegithub仓库的分支。我使用after_init钩子(Hook)来确定基于属性的字段页面模型实例并为这些字段定义属性访问器将值存储在序列化哈希中(希望它清楚我是什么谈论)。这是我正在做的事情的精简版:classPage省略mount_uploader命令让我可以访问我想要的属性。但是当我安装uploader时出现错误消息说“nil类的未定义新方法”我在源代码中读到有方法read_uploader和扩展模块中的write_uploader。我如何必须覆盖这些来制作mount_uploader命令使用我的“虚拟

  10. ruby-on-rails - Rails 格式验证——字母数字,但不是纯数字 - 2

    什么是测试格式验证的最佳方法让我们说一个用户名,使用字母数字的正则表达式,但不是纯数字?我一直在我的模型中使用以下验证validates:username,:format=>{:with=>/^[a-z0-9]+[-a-z0-9]*[a-z0-9]+$/i}数字用户名(例如“342”)通过了验证,这是我不想要的。 最佳答案 您想“向前看”一封信:/\A(?=.*[a-z])[a-z\d]+\Z/i 关于ruby-on-rails-Rails格式验证——字母数字,但不是纯数字,我们在Sta

随机推荐