替代要弃用的 UIView 自动布局方法

     2023-03-15     107

关键词:

【中文标题】替代要弃用的 UIView 自动布局方法【英文标题】:Alternative to UIView autolayout methods which are to be deprecated 【发布时间】:2015-04-28 06:03:45 【问题描述】:

根据 UIView.h 头文件,下面的方法将被弃用。

在代码中使用自动布局的替代方法是什么?

我看不出代码注释中推荐的方法如何替换现有的对应方法,因为它们适用于实际约束而不是 UIView 和约束之间的关系。

@interface UIView (UIConstraintBasedLayoutInstallingConstraints)

- (NSArray *)constraints NS_AVAILABLE_IOS(6_0);

- (void)addConstraint:(NSLayoutConstraint *)constraint NS_AVAILABLE_IOS(6_0); // This method will be deprecated in a future release and should be avoided.  Instead, set NSLayoutConstraint's active property to YES.
- (void)addConstraints:(NSArray *)constraints NS_AVAILABLE_IOS(6_0); // This method will be deprecated in a future release and should be avoided.  Instead use +[NSLayoutConstraint activateConstraints:].
- (void)removeConstraint:(NSLayoutConstraint *)constraint NS_AVAILABLE_IOS(6_0); // This method will be deprecated in a future release and should be avoided.  Instead set NSLayoutConstraint's active property to NO.
- (void)removeConstraints:(NSArray *)constraints NS_AVAILABLE_IOS(6_0); // This method will be deprecated in a future release and should be avoided.  Instead use +[NSLayoutConstraint deactivateConstraints:].
@end

【问题讨论】:

【参考方案1】:

约束本身包含关系(即,它们指向关系中涉及的一个或多个视图),因此将约束添加到视图的旧方法是多余的,有时会令人困惑,因为您必须选择正确的视图在层次结构中添加它们。

在新方法中,您只需创建约束并将其 active 属性设置为 YES(对于 Objective-C)或 true(对于 Swift),系统就会为您将其添加到正确的视图中.如果您要添加多个约束,则调用类方法activateConstraints:,它会为您设置属性。

使用旧方法,由程序员将约束添加到正确的视图。如果您对所涉及的视图 A 和视图 B 有约束,那么在何处添加约束有 3 种可能性:

    如果视图 A 是视图 B 的子视图(或子视图的子视图),则应将约束添加到视图 B。 如果视图 B 是视图 A 的子视图(或子视图的子视图),则应将约束添加到视图 A。 如果视图 A 和视图 B 都是另一个视图(称为 C)的子视图,则应将约束添加到视图 C。

使用新方法,您只需将约束的active 属性设置为YES/true,系统就会为您解决这个问题。这要容易得多。

【讨论】:

“为您添加到正确的视图”是什么意思?基于first/secondItem 属性的含义? “正确的视图”取决于两个视图在视图层次结构中的位置。如果视图 B 是视图 A 的子视图,则将约束添加到视图 A。如果视图 A 和 B 都是另一个视图的子视图,则将约束添加到视图 A 和 B 的父视图。 有趣 - 供参考,这里有一个简短的文章:ericasadun.com/2014/07/11/…

已弃用的 NSURLConnection 方法,有替代方法吗?

】已弃用的NSURLConnection方法,有替代方法吗?【英文标题】:DeprecatedNSURLConnectionMethods,isthereanalternative?【发布时间】:2012-02-2814:12:26【问题描述】:我正在设置一个NSURLConnection来访问远程服务器:NSURL*url=[[NSURLalloc]initWithString:proj... 查看详情

图像中已弃用的 Notification 类的替代方法是啥?

】图像中已弃用的Notification类的替代方法是啥?【英文标题】:WhatisthealternativeforthedeprecatedNotificationclassintheimage?图像中已弃用的Notification类的替代方法是什么?【发布时间】:2014-02-1811:14:20【问题描述】:我打算在android设备的... 查看详情

已弃用的 Hibernate.createClob(Reader reader, int length) 的替代方法是啥

】已弃用的Hibernate.createClob(Readerreader,intlength)的替代方法是啥【英文标题】:WhatisthealternatefordeprecatedHibernate.createClob(Readerreader,intlength)已弃用的Hibernate.createClob(Readerreader,intlength)的替代方法是什么【发布时间】:2012-02-1601:23:11【 查看详情

替代已弃用的 AudioManager.isWiredHeadsetOn?

】替代已弃用的AudioManager.isWiredHeadsetOn?【英文标题】:AlternativetothedeprecatedAudioManager.isWiredHeadsetOn?【发布时间】:2013-01-0207:43:44【问题描述】:方法AudioManager.isWiredHeadsetOn()从api级别14被弃用,我们现在如何检测是否连接了有线... 查看详情

寻找现在已弃用的 retryWhen 的替代方案

】寻找现在已弃用的retryWhen的替代方案【英文标题】:LookingforanalternativeofretryWhenwhichisnowDeprecated【发布时间】:2020-10-0616:34:43【问题描述】:我遇到了WebClient和reactor-extra的问题。确实,我有以下方法:publicEmployeegetEmployee(Stringemp... 查看详情

pymxs 替代已弃用的 MaxPlus 实用程序函数

】pymxs替代已弃用的MaxPlus实用程序函数【英文标题】:pymxsalternativestothedeprecatedMaxPlusutilityfunctions【发布时间】:2021-08-2400:11:17【问题描述】:随着Autodesk从3dsMax中删除MaxPlus,我现在不得不重新编写一些代码,并且想知道是否有... 查看详情

是否有快速替代已弃用的“SKPaymentTransaction.transactionReceipt”?

】是否有快速替代已弃用的“SKPaymentTransaction.transactionReceipt”?【英文标题】:Isthereafastreplacementfordeprecate`SKPaymentTransaction.transactionReceipt`?【发布时间】:2014-05-1513:41:45【问题描述】:是否有快速替代已弃用的SKPaymentTransaction.tran... 查看详情

Android:替代已弃用的 Context.MODE_WORLD_READABLE?

】Android:替代已弃用的Context.MODE_WORLD_READABLE?【英文标题】:Android:AlternativetothedeprecatedContext.MODE_WORLD_READABLE?【发布时间】:2012-12-0103:51:09【问题描述】:Fromhere我知道一种写入文件并可供其他应用程序和其他意图访问的方法,... 查看详情

BitmapDrawable 已弃用的替代方案

】BitmapDrawable已弃用的替代方案【英文标题】:BitmapDrawabledeprecatedalternative【发布时间】:2012-04-1606:11:56【问题描述】:我有以下代码可以将可绘制对象旋转一定的度数。publicDrawablerotateDrawable(floatangle,Contextcontext)BitmaparrowBitmap=Bitm... 查看详情

已弃用的 AudioManger.setStreamMute 的替代方案?

】已弃用的AudioManger.setStreamMute的替代方案?【英文标题】:AlternativefordeprecatedAudioManger.setStreamMute?【发布时间】:2016-01-0812:48:11【问题描述】:AudioManger.setStreamMute现在被api23弃用,最好使用AudioManager.adjustStreamVolume和AudioManager.ADJU... 查看详情

已弃用的 google plus api 的替代解决方案是啥?

】已弃用的googleplusapi的替代解决方案是啥?【英文标题】:Whatisthealternativesolutionofdeprecatedgoogleplusapi?已弃用的googleplusapi的替代解决方案是什么?【发布时间】:2019-06-2315:43:08【问题描述】:Google宣布在3月7日弃用所有googleplusapi... 查看详情

iOS 12.0 替代使用已弃用的 archiveRootObject:toFile:

】iOS12.0替代使用已弃用的archiveRootObject:toFile:【英文标题】:iOS12.0AlternativetoUsingDeprecatedarchiveRootObject:toFile:【发布时间】:2019-05-0322:47:12【问题描述】:在iOS12中,archiveRootObject:toFile:已被弃用。任何人都可以提出一种简化的替代... 查看详情

如何为已弃用的英特尔 IPP API 找到替代 API?

】如何为已弃用的英特尔IPPAPI找到替代API?【英文标题】:HowtofindalternativeAPIsfordeprecatedIntelIPPAPIs?【发布时间】:2014-11-0410:11:49【问题描述】:我正在与IntelIntegratedPerformancePrimitives(IntelIPP8.2)合作。我正在尝试使用来自UtilityFunction... 查看详情

[FFmpeg]啥是已弃用的 avpicture_alloc、avpicture::data 的替代品

】[FFmpeg]啥是已弃用的avpicture_alloc、avpicture::data的替代品【英文标题】:[FFmpeg]whatisreplacementsofavpicture_alloc,avpicture::datawhichweredeprecated[FFmpeg]什么是已弃用的avpicture_alloc、avpicture::data的替代品【发布时间】:2016-04-1204:47:35【问题描... 查看详情

channel 或 mutablesharedflow ,哪个是已弃用的 localbroadcastmanager 的更好替代品

...l或mutablesharedflow,哪个是已弃用的localbroadcastmanager的更好替代品【英文标题】:channelormutablesharedflow,whichoneisabetterreplacementfordeprecatedlocalbroadcastmanager【发布时间】:2021-04-0321:15:20【问题描述】:过去,我在聊天和出租车应用程序... 查看详情

OnActivityResult 方法已弃用,有啥替代方法?

】OnActivityResult方法已弃用,有啥替代方法?【英文标题】:OnActivityResultmethodisdeprecated,whatisthealternative?OnActivityResult方法已弃用,有什么替代方法?【发布时间】:2020-10-2113:30:48【问题描述】:我最近发现onActivityResult已被弃用。... 查看详情

OnActivityResult 方法已弃用,有啥替代方法?

】OnActivityResult方法已弃用,有啥替代方法?【英文标题】:OnActivityResultmethodisdeprecated,whatisthealternative?OnActivityResult方法已弃用,有什么替代方法?【发布时间】:2021-12-1316:12:04【问题描述】:我最近发现onActivityResult已被弃用。... 查看详情

用的挺顺手的springsecurity配置类,居然就要被官方弃用了?

...,如果你看了的话,肯定不会学废弃技术。这里把整套的替代方案再搞一遍,可别再学过时技术了。旧玩法:新玩法:相关原理去看这一篇文章。使用WebSecurity.ignoring()忽略某些URL请求,这些请求将被SpringSecurity忽略,这意味着这... 查看详情