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

设备旋转时的Swift UIcollectionViewcell网格布局subView未正确更新(以编程方式)

在Swift中,当设备旋转时,UICollectionViewCell的网格布局可能无法正确更新。这可能是由于布局约束或自定义布局代码的问题导致的。为了解决这个问题,你可以尝试以下几个步骤:

  1. 确保你的UICollectionViewCell的布局约束正确设置。这包括正确设置子视图的约束,以便它们在旋转时能够正确调整大小和位置。
  2. 在UICollectionViewDelegateFlowLayout的方法中,实现collectionView(_:layout:sizeForItemAt:)方法。在这个方法中,你可以根据设备的旋转方向返回正确的单元格大小。例如:
代码语言:txt
复制
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    if UIDevice.current.orientation.isLandscape {
        // 返回横向布局下的单元格大小
        return CGSize(width: 200, height: 200)
    } else {
        // 返回纵向布局下的单元格大小
        return CGSize(width: 100, height: 100)
    }
}
  1. 在UIViewController的viewWillTransition(to:with:)方法中,更新UICollectionView的布局。在这个方法中,你可以调用collectionView.collectionViewLayout.invalidateLayout()来使布局无效,然后在下一次布局更新时重新计算单元格的大小和位置。
代码语言:txt
复制
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
    
    coordinator.animate(alongsideTransition: { _ in
        self.collectionView.collectionViewLayout.invalidateLayout()
    }, completion: nil)
}

通过以上步骤,你可以确保在设备旋转时,UICollectionViewCell的网格布局能够正确更新。

关于Swift、UICollectionView、布局约束等相关概念和技术,你可以参考腾讯云的开发者文档和教程,以获取更详细的信息和示例代码。以下是一些相关的腾讯云产品和文档链接:

请注意,以上链接仅供参考,具体的产品和文档可能会根据腾讯云的更新而有所变化。建议你在访问这些链接时,根据自己的需求和实际情况进行进一步的搜索和浏览。

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

相关·内容

View编程指南(三)

如果您希望编程方式创建view,请创建并初始化它们,然后使用以下方法将它们排列为层次结构: 要将subview添加到superview,请调用superviewaddSubview:方法。...如果编程方式构建view,则将view创建代码放置在view controllerloadView方法中。...您可以使用这些通知来更新与您view层次结构相关任何状态信息或执行其他任务。 创建view层次结构后,可以使用superivew和subview属性编程方式导航它。...在编写布局代码,请务必以下列方式测试您代码: 更改view方向确保布局在所有支持接口方向上正确。 确保你代码正确响应状态栏高度变化。...它可以从一个nib文件加载view或以编程方式创建它们。当这些views不再需要,就把它们处理掉。 当设备改变方向,view controller可能会调整view大小和位置匹配。

1.7K30

平面检测-搜索真实世界表面

现在我们已经完成了正确运行ARKit项目的所有基本设置,我们希望我们设备能够坐在水平表面上。这是飞机检测。在本节中,我们将学习如何激活平面检测。我们将熟悉锚点以及如何使用它们将对象放置在锚点上。...node.addChildNode(planeNode) 运行应用程序查看网格。 修复平面节点 检查网格,您应该会看到一些问题。首先,网格是立起来,另一个问题是你只能看到飞机一侧网格。...这是我们需要解决两个问题。 好吧,还记得在我们第一次拖动飞机作为屏幕手表场景吗?它默认方向是垂直。嗯,这里也是如此。所以我们需要将它旋转90度。但是,Swift将角度存储在弧度中。...isDoubleSided = true 运行该应用程序测试修复程序。因此,我们能够在检测到表面将其可视化,在我示例中是地板。但我们知道地板比那更大。不幸是,当我四处走动网格并没有变大。...您会看到在移动设备,表面的大小会相应更新。 删除锚点 有时会发生错误。场景可以检测同一表面的多个锚点。我们可以通过添加didRemove方法来解决这个问题。

2.9K30

SwiftUI 布局协议 - Part2

subview.place(at: point, anchor: .center, proposal: .unspecified) } } } 当布局发生改变,SwfitUI...另外两个旋转指向中心,但是一个不使用动画而另一个使用。 避免布局循环和崩溃 众所周知我们在布局期间不能更新视图状态。这会导致不可预测结果,很可能会使 CPU 达到峰值。...视图缩放和旋转要再一次使用双向自定义值实现。 在这个例子中在容器中一共有44个视图,所以我们新容器将会分别12,12,12和8为一圈。 注意本案例中如何使用缓存与子视图通信。...另一个组合案例:插入两个布局 下一个例子将会创建一个轮子,或者波浪形式显示视图布局。...总结 即使你不打算写你自己布局容器,明白它是如何工作也会帮助你理解布局在 SwiftUI 一般工作方式

2.7K30

View编程指南

当拉伸View,系统将这些归一化值乘以view的当前边界和比例因子,确定哪些像素或像素需要拉伸。每当View边界发生变化时,使用规范化值就可以减少更新contentStretch属性必要性。...由于每个view都是绘制其内容,并将其子view相对于其bounds进行布局,所以在绘制和布局过程中可以忽略其superview变换。 图展示了两种不同旋转因素在渲染如何组合。...任何子viewframe矩形仍然有效,因为它们是相对于viewbounds View运行时交互模型 每当用户与您用户界面进行交互,或者您自己代码编程方式更改某些内容,都会在UIKit内部发生一系列复杂事件来处理该交互...例如,您代码可能会: 更改view或其subview属性(frame,bounds,alpha等)。 调用setNeedsLayout方法将view(或subviews)标记为需要布局更新。...不要通过嵌入subview来自定义控件 虽然在技术上可以将subview添加到标准系统控件(从UIControl继承对象),但不应该以这种方式定制它们。

2.2K20

Swift 自定义布局实现瀑布流视图

说到布局 layout,大家在开发过程中与 UICollectionView 搭配使用最多 应该就是 UICollectionViewFlowLayout 了,这是 UIKit 提供给开发者最基础网格布局...自定义布局 日常开发中,我们使用 UICollectionView 控件都会搭配一个默认,提供一些基础布局 UICollectionViewFlowLayout 来使用,但是当我们需要实现定制化程度比较高界面...做调整,例如它尺寸,旋转角度,缩放等等。...这里我用了 Swift 生成随机数方式,在给每个 item 设置 frame 时候,随机生成一个高度,这也是我们创建动态化界面的常用方式,这个代码逻辑就比较简单了,一行代码即可搞定: CGFloat...位置信息赋值,最后再更新一下每列高度,直到为每一个 Cell 都重新计算了一遍它位置。

2.3K30

SwiftUI 4.0 全新导航系统

SwiftUI 4.0( iOS 16+ 、macOS 13+ )对导航系统作出了重大改变,提供了视图堆栈为管理对象新 API ,让开发者可以轻松实现编程式导航。本文将对新导航系统作介绍。...,一分为二方式将让布局表达更加清晰,同时也会强迫开发者为 SwiftUI 应用对 iPadOS 和 macOS 做更多适配。...因此对于支持多硬件平台应用来说,最好针对不同场景分别使用对应导航控件。 两个组件两种逻辑 相较于控件名称上改变,编程式导航 API 才是本次更新最大亮点。...NavigationLink 仍需设定目标视图,会造成不必要实例创建开销 较难实现从视图外调用导航功能 “能用,但不好用” 可能就是对老版本编程式导航比较贴切地总结。...分栏布局 在 SwiftUI 4.0 之前版本,可以这样使用 NavigationView 来创建拥有左右两个栏编程式导航视图: class MyStore: ObservableObject {

10.2K62

iOS流布局UICollectionView系列四——自定义FlowLayout进行瀑布流布局

这种布局无疑在app应用中更加广泛,商品展示,书架书目的展示,都会倾向于采用这样布局方式,当然,通过自定义FlowLayout,我们也很容易实现。...总之,FlowLayout类将每个item位置等布局信息放在一个数组中,在collectionView布局,会调用FlowLayout类layoutAttributesForElementsInRect...    //这个数组主要作用是保存每一列总高度,这样在布局,我们可以始终将下一个Item放在最短列下面     CGFloat colHight[2]={self.sectionInset.top... 这里是通过将所有的item高度平均化,计算出来(最高列位标准)     if (colHight[0]>colHight[1]) {         self.itemSize = CGSizeMake...(7_0); //配置item旋转 @property (nonatomic) CGAffineTransform transform NS_AVAILABLE_IOS(7_0); //配置item

2.9K20

深度解读 Observation —— SwiftUI 性能提升新途径

在 WWDC 2023 中,苹果介绍了 Swift 标准库中新成员:Observation 框架。它出现有望缓解开发者长期面临 SwiftUI 视图无效更新问题。...宏(Macro)是 Swift 5.9 中新增一项功能。它允许开发者在编译操纵和处理 Swift 代码。...在一个视图中,可以同时存在不同方式声明可观察对象。SwiftUI 将根据可观察对象在视图中注入方式选择对应观察手段。...例如,上文中同时满足两种观察途径可观察对象,根据其注入方式不同,SwiftUI 采用更新策略也将不同。...无论它处在关系链中任何层级,或以任何形式存在(如数组、字典等),都能被正确地跟踪。

50620

@State 研究

本文试图探讨并分析SwiftUI 中 @State实现方式和运行特征;最后提供了一个有关扩展@State功能思路及例程。读者需要对SwiftUI响应式编程有基本概念。...研究意义何在 我在去年底使用了SwiftUI写了第一个 iOS app 健康笔记,这是我第一次接触响应式编程概念。在有了些基本认识和尝试后,深深被这种编程思路所打动。...mutating情况下修改结构中值2.当状态值发生变化后,视图会自动重绘反应状态变化。...视图会自动重绘反应状态变化。...在响应式编程开始流行今天,越来越多的人都在使用单一数据源(Single Souce of Truth)构架方式进行设计和开发。如何使用@State这种作用域范围仅限于当前视图特性?

2.9K20

折叠屏上应用设计规范,了解一下?

Android 开发者峰会 期间我们更新了一些内容,帮助开发者为可折叠设备等更多其他类型设备做好准备。...这一做法在小屏上或许行得通,当屏幕尺寸较大就会出现明显问题。网格系统则将您布局划分为一系列栏,从而帮助您在规范网格中设计更具表现力布局。...△ 使用栏式网格在不同屏幕尺寸中对内容进行重排 记住网格系统有助于您选择组件行为,在不同布局中,以对设备尺寸和场景最有意义方式决定替换还是更改组件。...适配可折叠设备 可折叠设备不仅配备了更大屏幕,它们还可以根据设备折叠方式和用户使用方式调整设备方向/姿势。 目前有三种常见设备形态: 折叠、折叠和桌面模式 (悬停)。...FoldingFeature 中还包含窗口中折叠位置,当折叠导致内容视图被割裂,我们应该及时更新布局参数。

4.3K20

iOS开发之虾米音乐频道选择切换效果分析与实现

从下方效果可以直观看出,当点击切换被选中Tab会放大,并且上次选中Tab会缩小到原来选中状态。不难看出在放大Select Tab基线是不变,就是放大效果是从下往上去走。...可以定制选中状态下颜色和大小 可以定制选中状态下颜色和大小 可以定制切换时间  下方是该组件切换和定时方式 ?...然后就是做放大缩小动画了,选中Tab进行放大,上次选中Tab缩小。 从下方效果可以看出,放大字体是不会变虚,肯定不是用仿射变换这种放大方式。 ?...Cell可以实现上述放大效果,但是Cell内部SubView没有放大动画效果,设置BackgroundImage也是不行。具体表现出来现象是Cell放大后,里边SubView才会放大。...最后选择方案是ScrollView + 自定义Button方式来实现。在自定义Button中使用图片方式来显示Title。也就是先将Title渲染成图片,然后图片方式来展示Title。

1.6K30

Swift 项目 - Xib | StoryBoard 多人协作技巧

实际使用例子参见《纯Swift项目-Xib | StoryBoard 设备适配技巧》[1]或其他StoryBoard文章 StoryBoard 和 Xib 不利于多人协作,git合并代码容易冲突,且难以处理...这个问题其实问很模糊,我也是咨询了很多人才知道,他们所谓问题不容易测试,是指如下两种情况: 修改或删除 @IBOutlet 变量名,对应Storyboard上做处理,导致运行时崩溃,崩溃内容看不懂...绑定类名改变,对应Storyboard上做处理,导致运行时崩溃,崩溃内容看不懂!...实际上约束布局是一个很强大功能,可以解决绝大多数(98%)布局适配问题,98%这个数并不是随便给出,很多人觉得达不到这个比例是因为对约束理解较少,还是按照以前autolayoutMask方式使用约束...StoryBoard 或 Xib上使用约束技巧,可以参考文章《纯Swift项目-Xib | StoryBoard 设备适配技巧[2]》及 《纯Swift项目-Xib | StoryBoard 约束使用技巧

2K20

iOS图片浏览器(功能强大性能优越)

于是组件中笔者做法是,在每次重写布局,都移动一个距离:当前偏移量 / 最大偏移量 * 总共页间距 其实做法很简单,但这种思维方式却非常实用,在我们做很多需要平滑过渡逻辑(不局限于界面),都可以这种思维做出...布局更新时机优化 大家很容易就想到,当设备旋转过后,若组件支持该方向,就通知所有子界面刷新布局(可能有人会说用autolayout,但是考虑到效率和可控性方面的问题,本组件都采用frame处理)。...所以,这里需要加入一个标识,用来存储此时当前 UIView 显示frame类型是“竖屏”还是“横屏”,而不是每一种屏幕状态变化都去做所有的布局更新,理论上提高了一倍布局开销。...引入代理规范布局流程 由于通知子视图更新布局、存储当前视图分别在“竖屏”和“横屏”下frame、存储当前适配屏幕方向等信息是每一个视图几乎都会做工作(虽然细节有些差异,但我们稍宏观看这个问题)。...)so_updateFrameWithScreenOrientation:(YBImageBrowserScreenOrientation)screenOrientation; @end 需要跟随屏幕旋转更新布局

2.2K70

聚焦位置-选择您喜欢位置放置虚拟物体

(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } 焦点方块属性 与我们对网格相同方式...两个名称之间区别在于,类大写字母F开头,而变量大小写为f。命名focusSquare方法称为camel case,它是Swift标准命名约定。...该focusSquare是我们以前存储变量。如果有,则将其存储在局部变量中更新场景。...焦点方块更新 接下来,我们想对焦点方块进行其他类型更新。在viewWillDisappear之后ViewController.swift中,为更新创建一个新函数。...如果是这种情况,那么焦点方块将是关闭方图像。否则,将焦点方块打开。 focusSquareLocal.isClosed = false 运行应用程序。一切看起来都很棒但是如果你旋转设备怎么办?

2.4K30

Webots R2022b 发布

更改了Web 界面的加载屏幕和进度条布局和行为( #4593 )。 改进了文本编辑器中生成 PROTO 源显示,现在只读模式打开 ( #5023 )。...将丢失样本世界转换gears.wbt为 ENU ( 4201 )。 修复了检索到相机设备纹理 ( #4218 )。 修复了 DEF 节点中更改针对 PROTO 传播错误(#4245)。...修复了手动或从主管更新 URL 形状中网格节点错误更新( #4245)。 修复了使用主管移动物体后导致物体沉入地下错误 ( #4070 )。...修复了更新网格节点 URL 导致发布多个更新错误 ( #4325 )。 固定透视图(即,当布局更改时)保存逻辑和相机菜单覆盖(#4350)。...添加wbu_car_set_[right/left]_steering_angle了允许直接控制车轮转向(#3933)。 改进了使用对象绕轴旋转功能用户体验 ( #3540 )。

1.4K20

成为一名优秀 Swift 开发人员 10 个小技巧

Swift 是一种现代语言,支持许多现代编程概念,同时保持代码简洁。 如果你想改进 Swift 代码,可以参考一下以下几点建议。 1....Swift 协议类似于 Java 中接口,这是 OOP 编程中最基础理论。...、masonry CollectionView layouts、颜色可渐变库之类; 更重要是,保持 Pod 更新,以避免使用低版本产生错误。...使用扩展并合理使用它们来创建公共库 我很喜欢 Swift 扩展。在使用 Objective-C ,我总是不情愿地使用继承。当然这并不总是错误正确使用子类也不会出错。...结论 我没有提到所有基本 OOP 原则。显然,您必须正确方式实现类,封装,抽象和设计模式。在本文中,我将重点更多地放在Swift功能上,提高代码效率并传递Swift机制优点。

2.3K40

iOS流布局UICollectionView系列六——将布局从平面应用到空间

而我们这次要讨论布局则不同,pickerView会随着我们手指拖动而进行滚动,因此UICollectionView中每一个item布局是在不断变化,所以这次,我们采用动态配置方式,在layoutAttributesForItemAtIndexPath...至于layoutAttributesForItemAtIndexPath方法,它也是UICollectionViewLayout类中方法,用于我们自定义进行重写,至于为什么动态布局要在这里面配置item...对于angle属性,它是每一个itemx轴旋转度数,如果我们将所有item中心都放在一点,通过旋转让它们散开如下图所示: ? 每个item旋转弧度就是其索引/(2*pi)。...仔细观察我们可以发现,itemx中轴线进行了旋转平均布局,侧面的效果就是我们上面的简笔画那样,下面要进行我们第三步了,将这个item,全部沿着其Z轴向前拉,就可以成为我们滚轮效果,示例图如下: ?...一个滑动范围,我们一屏collectionView滑动距离来当做滚轮滚动一下参照,我们在布局类中的如下方法中返回滑动区域: -(CGSize)collectionViewContentSize{

1.4K20

iOS开发常用之网络

会自动将collection view处理完善,并将用户消息合适美观方式显示出来。每个iOS项目都可以自动处理。...BubbleTransition - 气泡膨胀和缩小动画效果来显示和移除控制器,Uber就是这种取消操作方式。...QQBtn - 仿QQ读消息弹性按钮动画,达到和手机QQ读信息一样动画效果,效果基本实现。 GMStepper - swift带动画效果,支持手势滑动操作步进标签。...VJDeviceSpecificMedia - 如何根据设备选择不同尺寸图片 可以通过设置不同尺寸设备LaunchImage,来使用App适配这些设备,要在不同尺寸设备上使用不同大小图片,则需要在代码中一一判断...KYAnimatedPageControl - 除了滚动视图PageControl会动画形式一起移动,点击目标页还可快速定位。支持两种样式:粘性小球和旋转方块。

23.6K10
领券