热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何使用autolayout获得真正大小的UIView-HowtogetrealsizeUIViewwithautolayout

ImanewdeveloperiOS.我是一名新开发者iOS。Iuseauto-layout.我使用自动布局。Ihaveaproblem.Icannotget

I'm a new developer iOS.

我是一名新开发者iOS。

I use auto-layout.

我使用自动布局。

I have a problem. I can not get real size of UIView after constraints.

我有个问题。在约束之后,我无法获得UIView的实际大小。

Example, when I want get size of UIView with constraint

例如,当我想要获得具有约束的UIView的大小时

self.container.frame.size.height

It alway return 550 for all device size. But I can see it have difference size when I run it on difference device.

对于所有设备尺寸,它总是返回550。但是当我在差异设备上运行它时,我可以看到它有不同的大小。

Thanks

谢谢

8 个解决方案

#1


13  

The simplest solution is to just run that code in -viewDidAppear: (after autolayout has been run).

最简单的解决方案是在-viewDidAppear中运行该代码:(在运行autolayout之后)。

#2


38  

Before your "getting real size code", insert the following code:

在“获取实际大小代码”之前,请插入以下代码:

[view setNeedsLayout];
[view layoutIfNeeded];

#3


14  

Since everybody assumes the access is done via a UIViewController and not inside a UIView subclass, the answers don't prove really useful. The correct way to get the correct size of a UIView subclass is in layoutSubviews.

由于每个人都认为访问是通过UIViewController完成的,而不是在UIView子类中,因此答案并不真正有用。获取UIView子类的正确大小的正确方法是在layoutSubviews中。

#4


9  

You could just use the UIView method intrinsicContentSize

您可以使用UIView方法intrinsicContentSize

enter image description here

which you can read about https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/occ/instm/UIView/intrinsicContentSize

您可以阅读有关https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/occ/instm/UIView/intrinsicContentSize的内容

#5


6  

This is awesome.

这太棒了。

If you want to get frame without using layoutsubviews method during autolayout usage, Use this one:

如果您想在自动布局使用期间不使用layoutsubviews方法获取帧,请使用以下方法:

dispatch_async(dispatch_get_main_queue(), ^{
        NSLog(@"View frame: %@", NSStringFromCGRect(view.frame));
    })

#6


3  

Seems like - (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize; is what you are looking for:

好像 - (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize;是你在找什么:

Return Value
The size of the view that satisfies the constraints it holds.

返回值满足其所拥有约束的视图大小。

Discussion
Determines the best size of the view considering all constraints it holds and those of its subviews.

讨论确定视图的最佳大小,考虑它所拥有的所有约束及其子视图的约束。

https://developer.apple.com/documentation/uikit/uiview/1622624-systemlayoutsizefittingsize?language=objc

https://developer.apple.com/documentation/uikit/uiview/1622624-systemlayoutsizefittingsize?language=objc

#7


1  

The best moment is during the viewDidLayoutSubviews because it happens before the viewDidAppearso you still are able to do some modifications before the view is displayed.

最佳时刻是在viewDidLayoutSubviews期间,因为它发生在viewDidAppearso之前,您仍然可以在显示视图之前进行一些修改。

#8


0  

[view layoutIfNeed] save me.

[查看layoutIfNeed]救救我。

Use this method to force the layout of subviews before drawing. Using the view that receives the message as the root view, this method lays out the view subtree starting at the root.

使用此方法在绘制之前强制子视图的布局。使用以根视图接收消息的视图,此方法从根开始布局视图子树。

After invoke this method, I can get actual size of custom view in xib. Thanks a lot to @Allen and the author.

调用此方法后,我可以在xib中获得自定义视图的实际大小。非常感谢@Allen和作者。


推荐阅读
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 本文介绍了MVP架构模式及其在国庆技术博客中的应用。MVP架构模式是一种演变自MVC架构的新模式,其中View和Model之间的通信通过Presenter进行。相比MVC架构,MVP架构将交互逻辑放在Presenter内部,而View直接从Model中读取数据而不是通过Controller。本文还探讨了MVP架构在国庆技术博客中的具体应用。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文介绍了Codeforces Round #321 (Div. 2)比赛中的问题Kefa and Dishes,通过状压和spfa算法解决了这个问题。给定一个有向图,求在不超过m步的情况下,能获得的最大权值和。点不能重复走。文章详细介绍了问题的题意、解题思路和代码实现。 ... [详细]
  • 本文介绍了一道经典的状态压缩题目——关灯问题2,并提供了解决该问题的算法思路。通过使用二进制表示灯的状态,并枚举所有可能的状态,可以求解出最少按按钮的次数,从而将所有灯关掉。本文还对状压和位运算进行了解释,并指出了该方法的适用性和局限性。 ... [详细]
  • 本文介绍了SPOJ2829题目的解法及优化方法。题目要求找出满足一定条件的数列,并对结果取模。文章详细解释了解题思路和算法实现,并提出了使用FMT优化的方法。最后,对于第三个限制条件,作者给出了处理方法。文章最后给出了代码实现。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
author-avatar
banli
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有