首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在不使用ios中的AutolayOut的情况下使UITableView高度动态到特定的高度,然后允许滚动

在不使用iOS中的Autolayout的情况下,可以通过以下步骤使UITableView的高度动态到特定的高度,并允许滚动:

  1. 首先,需要在视图控制器中创建一个UITableView的实例,并设置其数据源和代理。
  2. 在视图控制器中,创建一个变量来保存UITableView的高度。例如,可以声明一个名为tableHeight的CGFloat变量。
  3. 在视图加载完成后的方法(如viewDidLoad)中,设置UITableView的frame属性,将其高度设置为tableHeight。
  4. 在UITableView的数据源方法中,根据数据源的内容计算出UITableView的实际高度,并将其赋值给tableHeight变量。
  5. 在数据源方法中,返回正确的行数和单元格内容。
  6. 如果UITableView的高度超过了特定的高度,可以将其滚动启用,以便用户可以滚动查看所有内容。可以通过设置UITableView的scrollEnabled属性为true来实现。

以下是一个示例代码:

代码语言:txt
复制
import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    var tableView: UITableView!
    var tableHeight: CGFloat = 0
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 创建UITableView实例
        tableView = UITableView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: tableHeight))
        tableView.dataSource = self
        tableView.delegate = self
        
        // 添加UITableView到视图中
        view.addSubview(tableView)
    }
    
    // 计算UITableView的实际高度
    func calculateTableHeight() {
        // 根据数据源内容计算高度
        // 例如,可以根据行数和每行的高度计算
        let numberOfRows = 10
        let rowHeight: CGFloat = 44
        tableHeight = CGFloat(numberOfRows) * rowHeight
        
        // 更新UITableView的frame
        tableView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: tableHeight)
    }
    
    // UITableViewDataSource方法
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: .default, reuseIdentifier: "Cell")
        cell.textLabel?.text = "Row \(indexPath.row)"
        return cell
    }
    
    // UITableViewDelegate方法
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 44
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        // 在视图显示后计算UITableView的实际高度
        calculateTableHeight()
    }
}

这样,UITableView的高度将根据数据源的内容动态调整到特定的高度,并且可以滚动查看所有内容。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

有了Auto Layout,为什么你还是害怕写UITabelView的自适应布局?

Apple 算是最重视应用开发体验的公司了.从Xib到StoryBoard,从Auto Layout到Size Class,每一次的更新,都会给iOS应用的开发带来不小的便利.但是,对于绝对多数iOS攻城狮来说...,根据数量动态计算高度;转发部分同理;然后根据数据在tabelView的代理方法 tableView:heightForRowAtIndexPath: 中动态返回高度即可.是的,思路就是这么个思路,但是你确定产品经理一直不会改需求....由于浮点数四舍五入机制的存在,所以偶现UILabel最后一行无法显示的情况.原因也很诡异: 在你计算时,部分值会存在稍许的不超过0.01的误差,大多数情况下,这个误差值,可以安全忽略,但是确实存在那0.01...,然后计算cell高度.然后你会发现,凡是稍微涉及到图片显示的界面,你的显示是对的,但是滚动非常卡顿,因为你在自己浑然不觉的情况下创建了N个Cell,而且这些Cell绝对不会参与复用....Masonry — 使用纯代码进行iOS应用的autolayout自适应布局 2.使用 UITableView-FDTemplateLayoutCell 根据单元格内容的约束自适应单元格高度 ?

92260
  • iOS开发中行高灵活可变的UITableView的性能优化

    iOS开发中行高灵活可变的UITableView的性能优化 一、UITableView的构建原理         在新闻类,电商类等应用中,应用着大量的图文混排视图,在表视图UITableView中,...在开发中通常会遇到一些十分复杂的界面,而这些界面中cell的高度都是需要通过请求到的数据动态改变的,每个cell都要写复杂的尺寸计算代码十分令人心烦。...那么现在问题来了,如何才能让cell正确计算自己的高度,这就要使用到Autolayout了,无论是通过xib文件创建的cell还是代码创建的cell,若想让cell自动正确的计算出自身的高度,必须添加足够压力的约束...关于细节方面,还有一个问题需要注意,预估的行高会影响到TableView右侧滚动条的展现,如果每个cell行高跳跃跨度十分大,滚动条宽度的配置会失准,随着用户滑动表视图,右侧滚动条可能会出现长短跳跃的情况...三、关于高度不定的UITableView分区头尾视图         一般情况下,TableView的分区头尾视图高度都是固定的,因此一般不需要考虑计算分区头尾视图高度产生的性能问题,类比如cell的布局原理

    2K20

    浅汇-iOS UI布局

    iOS中UI的布局是很重要的,而在前期开发中就要选定好布局的方法,因为这对整个工程乃至于后期的版本维护都有很重要的影响。...本文从比较老的Frame到新生AutoLayout都进行了浅显的总结,希望对大家的UI布局学习有所帮助 ---- Frame 父试图是使用的AutoLayout  ,如果子试图的Frame  = supeView.Frame...2、实现了UIView内子视图的自动布局; 3、实现了UIScrollView内容高度根据内部子视图的内容高度动态设置; 4、实现了一个UITableView有多个不同Cell的时候,所有cell高度自适应...实现了UIScrollView可滚动高度根据内部子视图的内容高度动态设置 /** 设置scrollview内容自适应,第一个参数为作为底部的子视图,第二个参数为到sc底部的间距。...` ---- 小结  iOS关于UI布局的知识还有很多,至此我列举了一些需要注意的地方,使用的时候是先初始化`new`比较方便,先加载到父视图上后设置相关的属性,然后再进行布局方面的设置,若后加到父试图上

    2.1K20

    MyLayout&TangramKit 的重大升级!

    比如一些界面中有父视图的尺寸由子视图的尺寸来确定的;还比如UIScrollView中为了能实现滚动需要根据添加到里面的子视图来调整contentSize的尺寸;又比如某些UITableViewCell中的高度是动态的...//本文对AutoLayout进行约束设置都是用iOS9以后所提供的进行约束设置的简易方法。...3.UITableViewCell的高度自适应 UITableViewCell要实现高度自适应,需要在UITableViewDelegate中的方法: -(CGFloat)tableView:(UITableView...所有为子视图设置的约束都必须放入到一个布局视图中才有效。整个布局框架提供了多种布局视图,每种布局视图中的子视图都将按照特定的规则进行排列和布局。...UITableViewCell的高度自适应 UITableViewCell要实现高度自适应,需要在UITableViewDelegate中的方法: -(CGFloat)tableView:(UITableView

    2.1K20

    AsyncDisplayKit 2.0 教程:入门「译」

    对象生命周期:创建,操纵和销毁系统对象(即创建一个UIView) 当正确使用时,AsyncDisplayKit 允许您在默认情况下异步执行所有测量、布局和渲染。...免责声明:ASDK不兼容 Interface Builder和AutoLayout,因此,您将不会在本教程中使用它们,虽然ASDK完全支持Swift(除了ComponentKit),许多开发者仍在使用...在下面的章节中,我们将遵循这些协议,使我们能够使用 tableNode 的功能。...你可以选择为单元格定义最小和最大尺寸,而不是提供静态高度。这种情况下,你希望每个cell的高度至少为屏幕的 2/3。 现在不用担心太多,这个会在第二部分中介绍。...现在,你就需要考虑如何在两个方向上动态加载内容。同时,还要对每个设备进行优化。 还记得告诉你 ASRangeController 是不重要的吗?现在,这将是我们的重点。

    2.2K20

    Ios常用第三方框架(二)

    图表 PNChart - 国内开源作者,动态的图表。 swift-linechart - 功能完整、实用的折线图组件。使用方便,参数配置简单。是不可多得的优质组件--swift。...比如,之前要实现一个填写各种资料的列表,可能需要很多代码,现在只需要几行代码就可以实现。 UIScrollSlidingPages - 允许添加多视图控件,并且可以横向滚动。...HorizontalScrollCell - HorizontalScrollCell是一款使用方便的水平方向可滚动的单元格,适用于UICollectionView中实现水片方向滚动视图。 。...QuickRearrangeTableView - 基于 UITableView 的快速重排功能扩展子类。通过长按选定单元格然后滚动移动到指定位置。...微博cell自动布局 - 使用autoLayout对微博的cell进行自动布局,自适应cell的高度。

    7.7K60

    Ios常用第三方框架(一)

    MJRefresh - 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能。可以自定义上下拉刷新的文字说明。具体使用看“使用方法”。...AutoLayout Masonry - Masonry是一个轻量级的布局框架,拥有自己的描述语法,采用更优雅的链式语法封装自动布局,简洁明了并具有高可读性(使用介绍1使用介绍2),iOS自适应前段库...UIView-FDCollapsibleConstraints - 一个AutoLayout辅助工具,最优雅的方式解决自动布局中子View的动态显示和隐藏的问题。...SDAutoLayout - AutoLayout 一行代码搞定自动布局!支持Cell、Label和Tableview高度自适应,致力于做最简单易用的AutoLayout库。...AutocompleteField - 可应用于 iOS 应用中文字输入框自动补全的场景, 兼容到 iOS 8。

    5.5K31

    iOS自动布局框架之Masonry

    在项目中设置的AutoLayout约束,起到对视图布局的标记作用。设置好约束之后,程序运行过程中创建视图时,会根据设置好的约束计算frame,并渲染到视图上。...和上面的区别在于,一个代表某个坐标系对象,一个用来获取坐标系对象的值 说明:上面例如equalTo或者width这样的,有时候需要涉及到使用mas_前缀,这在开发中需要注意作区分。...动态Cell高度 在iOS UI开发过程中,UITableView的动态Cell高度一直都是个问题。...实现这样的需求,实现方式有很多种,只是实现起来复杂程度和性能的区别。在不考虑性能的情况下,tableView动态Cell高度,可以采取估算高度的方式。...需要设置tableView的rowHeight属性,这里设置为自动高度,告诉系统Cell的高度是不固定的,需要系统帮我们进行计算。

    1.1K60

    UITableView图文混排自动布局滑动优化实战

    AutoLayout和手动计算高度 毫无疑问,使用AutoLayout会明显的比手动计算高度慢,那么我为什么要用AutoLayout呢,因为实在太方便了,而且视图太复杂,产品改的太频繁,手动计算实在工作量太大...方案 1.缓存高度 既然手动计算高度更快,那就在Reuse的时候用AutoLayout帮我们算过后的高度就行了,缓存一个高度字典(或者数组),在算完渲染出来的时候取高度,在取高度的时候做个判断就行。...[imageView stopAnimating]; } 3.预加载 预加载分为两种,一种是图片预加载,另一种是内容预加载,先说内容预加载,其实就是在指定滚动到第几个cell的时候开始分页请求,这样用户就会无感知的开开心心的刷刷刷了...]; 会自动创建网络请求下载图片,下载完存入内存和本地缓存里,下次使用直接使用sd_setImageWithUrl会自动去内存里寻找下载完的图片。...UIImageView上,就会导致UI线程阻塞,用户就感觉到卡顿了。

    1.3K10

    iOS自动布局框架之Masonry

    在项目中设置的AutoLayout约束,起到对视图布局的标记作用。设置好约束之后,程序运行过程中创建视图时,会根据设置好的约束计算frame,并渲染到视图上。...和上面的区别在于,一个代表某个坐标系对象,一个用来获取坐标系对象的值 说明:上面例如equalTo或者width这样的,有时候需要涉及到使用mas前缀,这在开发中需要注意作区分。...动态Cell高度 在iOS UI开发过程中,UITableView的动态Cell高度一直都是个问题。...实现这样的需求,实现方式有很多种,只是实现起来复杂程度和性能的区别。在不考虑性能的情况下,tableView动态Cell高度,可以采取估算高度的方式。...需要设置tableView的rowHeight属性,这里设置为自动高度,告诉系统Cell的高度是不固定的,需要系统帮我们进行计算。

    2.1K50

    IOS学习——iphone X的适配

    项目中是纯代码布局,使用AutoLayout框架Masonry进行布局),这一块的问题很少,也很简单,改变一下相对位置的值看看效果就ok。...UISearchBar的高度有变化,而且点击之后背景颜色和原先不一致    上图右边图是点击搜索框之前和点击结束输入后正常情况下的效果,左边图是iOS 11下点击点击结束输入后的效果。...UITableview的header高度变大,有的地方会出现空白cell格   iOS 11中对UITableview的改变也是蛮大的,原本的automaticallyAdjustsScrollViewInsets...竟然过期了,在IOS 11下 APPLE推荐使用UIScrollView的contentInsetAdjustmentBehavior属性进行设置自动计算滚动视图的内容边距。 ...,加上导航栏的高度的变化和safeArea的概念的提出,使得UITableview在iOS 11的布局上会出现一些偏差,因为涉及到项目信息,所以就不放图了。

    1.5K60

    android

    在项目中设置的AutoLayout约束,起到对视图布局的标记作用。设置好约束之后,程序运行过程中创建视图时,会根据设置好的约束计算frame,并渲染到视图上。...所以在纯代码情况下,视图设置的约束是否正确,要以运行之后显示的结果和打印的log为准。 Masonry中的坑 在使用Masonry进行约束时,有一些是需要注意的。...动态Cell高度 在iOS UI开发过程中,UITableView的动态Cell高度一直都是个问题。...实现这样的需求,实现方式有很多种,只是实现起来复杂程度和性能的区别。 在不考虑性能的情况下,tableView动态Cell高度,可以采取估算高度的方式。...实现方式: 需要设置tableView的rowHeight属性,这里设置为自动高度,告诉系统Cell的高度是不固定的,需要系统帮我们进行计算。

    73420

    2018 - iOS 面试题汇总一般面试题BAT面试题

    讲 讲你的使 场景以及使 时的注意事项 1.给扩展添加属性 2.替换系统方法的的实现 22.讲讲iOS事件响应链的原理 1、响应者链通常是由视图(UIView)构成的; 2、一个视图的下一个响应者是它视图控制器...动态计算高度的问题,都有哪些方案 1、你的Cell要使用AutoLayout来布局约束这是必须的; 设置tableview的estimatedRowHeight为一个非零值,这个属性是设置一个预估的高度值...NSURLProtocol是做什么的 1.下载 NSURLConnection下载文件时,先是将整个文件下载到内存,然后再写入到沙盒,如果文件比较大,就会出现内存暴涨的情况。...为这种属性设置新值得时,设置方法既不保留新值,也不释放旧值。此特性同assign类似,然后在属性所指的对象遭到摧毁时,属性值也会清空(nil out)。 弱引用,不决定对象的存亡。...如系统会获取dyld的路径,并加载。加载程序中的依赖库。调用所有的+ load方法,并返回main函数地址。

    6.5K30

    TableView优化之高度缓存

    在iOS开发中,继承是完全可以完成protocol和category的功能的,那么在开发过程中多多使用继承体系可好? 需要注意的是使用继承还有很大的代价问题。...= 本例中我们用runtime做了些什么呢? 使用runtime动态为category绑定属性 之前老司机说过,category是不能添加属性的。...因为我们无法保证或者指定只使用一种cell,很多情况下我们是自定义的cell。...当然IOS6之后的autoLayout就要比他强大不少了。 事实上这个属性默认情况下是YES。当为YES时,则我们设置约束是无效的。...3.然后如果是使用autoLayout进行自适应计算。 这个也是老司机为之后留下的接口,可以控制是否进行一autoLayout进行计算。但实际并没有处理。

    2.4K30

    你可能需要为你的 APP 适配 iOS11

    4、UINavigationController和滚动交互 滚动的时候,以下交互操作都是由UINavigationController负责调动的: 所以,如果你使用navigation bar,组装push...; ③ 通过约束关联你的子视图; 二、管理margins 和 insets 1、layout margins 基于约束的Auto Layout,使我们搭建能够动态响应内部和外部变化的用户界面。...: 2、Table Views :在iOS 11中默认启用Self-Sizing 这个应该是UITableView最大的改变。...在测试Demo中,创建tableView到显示出来的过程中,contentSize的计算过程如下图: Self-Sizing在iOS11下是默认开启的,Headers, footers, and cells...我写demo测试的时候,因为每个cell的高度都较小,所以只显示image,然后我增加cell的高度后,就可以同时显示image和title了。

    2.5K00

    你可能需要为你的 APP 适配 iOS 11

    管理margins 和 insets layout margins 基于约束的Auto Layout,使我们搭建能够动态响应内部和外部变化的用户界面。...UIScrollView and UITableView的新特性 Scroll Views 如果有一些文本位于UI滚动视图的内部,并包含在导航控制器中,现在一般navigationContollers会传入一个...在测试Demo中,创建tableView到显示出来的过程中,contentSize的计算过程如下图: ?...Table Views 和 Safe Area 有以下几点需要注意: separatorInset 被自动地关联到 safe area insets,因此,默认情况下,表视图的整个内容避免了其根视图控制器的安全区域的插入...我写demo测试的时候,因为每个cell的高度都较小,所以只显示image,然后我增加cell的高度后,就可以同时显示image和title了。见下图对比: ?

    1.7K60

    iOS 面试策略之系统框架-UIScrollView及其子类

    如何定制不同 Cell 的 UI、如何与用户交互、如何与服务器端数据同步、如何在滑动时最大限度保证界面的流畅,这些都是考察的要点,是一个 iOS 工程师必备的基本技能。...所以我们将同一类型的 UITableViewCell 标记为相同的 Identifier,然后用reuseIdentifier 去进行构建,配合不同内容进行批量使用。...关键词:#UICollectionViewLayout 面试中当场实现一个瀑布流,在不允许上网查询的情况下算是十分困难的了。而且代码量很大,所以我们这道题重在分析思路。...由于我们在 prepare() 中已经完成相应计算,此时只需返回对应 indexPath 的特定属性即可。...为了避免循环引用,最好的方法就是在我们的 UICollectionViewLayout 子类中定义一个 protocol,然后让 ViewController 实现这个protocol,来完成高度的获得

    2.7K21
    领券