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

获取preferredContentSize的视图高度

preferredContentSize 是一个在 macOS 和 iOS 开发中常用的属性,主要用于确定视图控制器(UIViewController)的理想内容大小。这个属性通常用于模态呈现的视图控制器,以便系统能够正确地调整其大小以适应内容。

基础概念

preferredContentSize 是一个 CGSize 类型的属性,它表示视图控制器的内容的首选大小。当视图控制器被模态呈现时,系统会使用这个大小来设置视图控制器的大小。

优势

  • 自适应布局:通过设置 preferredContentSize,可以确保视图控制器在不同设备和屏幕尺寸上都能正确显示。
  • 简化布局:开发者不需要手动计算和设置视图控制器的大小,系统会根据 preferredContentSize 自动调整。

类型

preferredContentSize 是一个 CGSize 类型的属性,包含两个部分:

  • width:内容的宽度。
  • height:内容的高度。

应用场景

  • 模态呈现:当一个视图控制器被模态呈现时,系统会使用 preferredContentSize 来确定其大小。
  • 自定义视图控制器:在自定义视图控制器中,可以通过设置 preferredContentSize 来控制其显示大小。

示例代码

以下是一个简单的示例,展示如何在 Swift 中设置 preferredContentSize

代码语言:txt
复制
import UIKit

class CustomViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 设置视图控制器的 preferredContentSize
        self.preferredContentSize = CGSize(width: 320, height: 480)
        
        // 添加一些内容到视图中
        let label = UILabel()
        label.text = "这是一个自定义视图控制器"
        label.numberOfLines = 0
        label.translatesAutoresizingMaskIntoConstraints = false
        self.view.addSubview(label)
        
        NSLayoutConstraint.activate([
            label.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
            label.centerYAnchor.constraint(equalTo: self.view.centerYAnchor)
        ])
    }
}

遇到的问题及解决方法

问题:为什么 preferredContentSize 没有生效?

原因

  1. 视图控制器的呈现方式preferredContentSize 只在模态呈现时生效。如果视图控制器是通过 push 或其他方式呈现的,preferredContentSize 不会生效。
  2. 布局约束:如果视图控制器中的内容没有正确设置布局约束,系统可能无法正确计算 preferredContentSize

解决方法

  1. 确保视图控制器是通过模态方式呈现的。
  2. 确保视图控制器中的内容设置了正确的布局约束。

示例代码

代码语言:txt
复制
// 模态呈现视图控制器
let customViewController = CustomViewController()
customViewController.modalPresentationStyle = .fullScreen
self.present(customViewController, animated: true, completion: nil)

参考链接

通过以上信息,你应该能够更好地理解 preferredContentSize 的概念、优势、类型、应用场景以及常见问题的解决方法。

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

相关·内容

  • js获取各种高度总结

    在写js时候偶尔需要获取各种高度,比如;浏览器高度,页面高度,滚动高度等。抽空整理了我自己常用到,时间仓促,没有考虑到万恶IE浏览器。。。。...获取屏幕高度和宽度(屏幕分辨率): window.screen.height window.screen.width 获取屏幕工作区域高度和宽度(去掉状态栏): window.screen.availHeight...window.screen.availWidth 网页全文高度和宽度: document.body.scrollHeight document.body.scrollWidth 滚动条卷上去高度和向右卷宽度...: document.body.scrollTop document.body.scrollLeft 网页可见区域高度和宽度(不加边线): document.body.clientHeight document.body.clientWidth...网页可见区域高度和宽度(加边线): document.body.offsetHeight document.body.offsetWidth

    12.6K20

    Javascript 获取div真实高度

    注意如果不是写在行内style中属性都不能通过id.style.atrr来获取。 现 在前端制作很少直接把样式写style里了,都是写在样式表里。...如果你要获取样式没有相对应(就像#div1.style.width对 应#div1.offsetWidth),就只能分别针对不用浏览器来获取样式表属性了,可以试着搜索“JS 获取样式属性”之类。...原文:http://www.cnblogs.com/zhwl/p/3858682.html 实际测试过程中,发现上面获取真实高度是有问题,其实无论是设置在样式表还是在行内设置,都会获取到你设置值,如果要获取真实高度...: alert(parseInt($('.article__content div').get(0).offsetHeight)); 获取时只要在这个样式里面的div大小,这个就是真实高度。...这里还附带其它获取高度方法 alert($(window).height()); //浏览器当前窗口可视区域高度 alert($(document).height()); //浏览器当前窗口文档高度

    5.1K30

    ClientHeight_offsetheight获取高度不对

    大家好,又见面了,我是你们朋友全栈君。 clientHeight:包括padding但不包括border、水平滚动条、margin元素高度。...style.height //返回元素高度(包括元素高度,不包括内边距、边框和外边距) clientHeight //返回元素高度(包括元素高度、内边距,不包括边框和外边距) offsetHeight...//返回元素高度(包括元素高度、内边距和边框,不包括外边距) scrollHeigh //返回元素高度(包括元素高度、内边距和溢出尺寸,不包括边框和外边距),无溢出情况,与clientHeight...相同 scrollTop //此属性可以获取或者设置对象最顶部到对象在当前窗口显示范围内顶边距离,也就是元素滚动条被向下拉动距离。...此属性是可读写。 offsetTop //返回元素上外缘距离最近采用定位父元素内壁距离,如果父元素中没有采用定位,则是获取上外边缘距离文档内壁距离。

    3.1K20

    iOS表视图单元格高度自适应

    iOS表视图高度自适应可以节省很多麻烦,尤其是涉及到复杂业务逻辑时,今天尝试了使用Masonry和FDTemplatelayoutCell来布局表视图单元格,从而达到单元格高度自适应效果,这里就总结了这其中使用要点和注意问题...首先,为了实现表视图单元格高度自适应,我们需要用到Masony和FDTemplatelayoutCell这两个第三方类库。同时这里使用一个简化订单界面来说明使用,效果图如下: ?...我们需要做就是使用Masonry对视图单元格中位于最底部视图设置bottom约束,使其能够确定距离单元格最低端距离。...因为在布局时候是相对于self,这样可能会使约束错乱,自适应高度无效。...因为我使用了xib文件来加载视图,所以开始时候写了如下方法获取单元格 //获取单元格 + (OrderTableViewCell *)getOrderTableViewCell{ NSArray

    1.8K70

    JavaScript、Jquery获取屏幕宽度和高度

    在日常项目中经常需要获取屏幕宽度或者高度,简单记录一下: Javascript方法获取: document.body.clientWidth //网页可见区域宽 document.body.clientHeight... //网页被卷去左 window.screenTop //网页正文部分上 window.screenLeft //网页正文部分左 window.screen.height //屏幕分辨率高 window.screen.width... //屏幕分辨率宽 window.screen.availHeight //屏幕可用工作区高度 window.screen.availWidth //屏幕可用工作区宽度 JQuery方法获取: ($(...window).height()); //浏览器当前窗口可视区域高度 ($(document).height()); //浏览器当前窗口文档高度 ($(document.body).height())...;//浏览器当前窗口文档body高度 ($(document.body).outerHeight(true));//浏览器当前窗口文档body高度 包括border padding margin

    5.3K00

    win10 uwp 获取窗口坐标和宽度高度 获取可视范围获取当前窗口坐标和宽度高度获取最前窗口范围

    本文告诉大家几个方法在 UWP 获取窗口坐标和宽度高度 获取可视范围 获取窗口可视大小 Windows.UI.ViewManagement.ApplicationView.GetForCurrentView...().VisibleBounds 获取当前窗口坐标和宽度高度 Window.Current.Bounds 获取最前窗口范围 通过 Win32 Api 获取最前窗口范围 IntPtr hWID...E5%8F%A3%E7%9A%84%E5%9D%90%E6%A0%87%E5%92%8C%E5%AE%BD%E5%BA%A6%E9%AB%98%E5%BA%A6.html ,以避免陈旧错误知识误导...,同时有更好阅读体验。...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://lindexi.gitee.io ),不得用于商业目的,基于本文修改后作品务必以相同许可发布。

    3.8K30

    如何在onCreate中获取View高度和宽度

    如何在onCreate中获取View高度和宽度 在开发过程中经常需要获取到View宽和高,可以通过View.getWidth()和View.getHeight()来得到宽高。...然而新手们经常在onCreate方法中直接调用上面两个方法得到值是0! 这是为什么呢? 因为View绘制是通过两个遍历来完成,一个measure过程,一个layout过程。...而这一切是发生在onCreate方法之后。所以在onCreate中直接使用View.getWidth()和View.getHeight()是无法得到正确。...那应该怎么onCreate中获取View宽高呢?...开发者可以通过View.post()方法来获取到View宽高,该方法传递一个Runnable参数,然后将其添加到消息队列中,最后在UI线程中执行。

    5.3K20

    item高度不同时Recyclerview获取滑动距离方法

    是基于item平均高度算得,如果列表中item高度一致可以用此方法。问题来了,我应用场景是各item高度不一,这时就只能另找方法了。...方法一: 网上找方法,用一个变量去统计,每次滑动时候累加y轴偏移量。item插入\移动\删除时候,需要手动去更新totalDy,不然就会一直错下去。...所以考虑重写LinearLayoutManagercomputeVerticalScrollOffset()方法,既然原生方法是按平均高度计算,那重写该计算逻辑,就能达到我们想要效果。...1.统计列表已展示过item高度,在每次布局完成时候,用一个map记录positon位置item对应view高度。...,通过heightMap循环累加0到positonitem高度,再加上第一个可见item不可见部分高度

    3K10
    领券