第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

我可以在同一視圖上使用setFrame和autolayout嗎?

我可以在同一視圖上使用setFrame和autolayout嗎?

慕村9548890 2019-11-25 14:13:54
我想向所有按鈕添加填充,因此我將UIButton子類化,在其他更改中,我想使用setFrame方法添加固定的填充。一切正常,除了setFrame。我檢查了一下,發(fā)現(xiàn)如果取消選中該視圖上的“ using AutoLayout”,那么我可以使用setFrame,它可以工作。有沒有解決的辦法?我真的想使用自動(dòng)布局,因?yàn)樗兄谑乖搼?yīng)用在iPhone 5和更早的設(shè)備上看起來都不錯(cuò)。但是我也想在子類中使用setFrame,使我的生活更輕松??偨Y(jié)一下,我的問題是:我可以使用自動(dòng)布局并以編程方式調(diào)整UIView的框架嗎?
查看完整描述

3 回答

?
慕的地8271018

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊

是的,可以這樣做。


如果設(shè)置了視圖的translatesAutoresizingMaskIntoConstraints = YES,則setFrame:在運(yùn)行時(shí)會(huì)根據(jù)視圖的current將對(duì)的調(diào)用自動(dòng)轉(zhuǎn)換為布局約束autoresizingMask。這使您可以將基于框架的布局與基于約束的布局混合使用。


例如,您可以使用“自動(dòng)布局”來定義視圖的所有子視圖的布局,但是仍然可以調(diào)用setFrame:來設(shè)置視圖本身的大小和位置。從您的角度來看,您正在結(jié)合使用自動(dòng)版面設(shè)計(jì)和直接框架操作來進(jìn)行版面設(shè)計(jì)。但是系統(tǒng)實(shí)際上是使用約束來處理所有事情。


但是,關(guān)于使用存在一個(gè)大警告translatesAutoresizingMaskIntoConstraints。


執(zhí)行此操作時(shí),您仍然需要確保其余約束可以滿足這些自動(dòng)約束。


因此,例如,假設(shè)已經(jīng)有確定視圖大小和位置的約束,然后還要設(shè)置translatesAutoresizingMaskIntoConstraints = YES和調(diào)用setFrame:。調(diào)用setFrame:將在視圖上生成新的約束,這可能與已經(jīng)存在的約束沖突。


(實(shí)際上,此錯(cuò)誤經(jīng)常發(fā)生。如果您看到一條日志消息抱怨約束沖突,并且其中一個(gè)約束是NSAutoresizingMaskLayoutConstraint,則您看到的是與自動(dòng)約束沖突。這是一個(gè)簡(jiǎn)單的錯(cuò)誤,因?yàn)閠ranslatesAutoresizingMaskIntoConstraints = YES是默認(rèn)值,因此,如果您要在代碼中配置約束,則在不需要這些自動(dòng)約束時(shí),請(qǐng)記住將其關(guān)閉。)


相反,再次假設(shè)已經(jīng)存在確定視圖大小和位置的約束,但是translatesAutoresizingMaskIntoConstraints = NO在調(diào)用之前先進(jìn)行設(shè)置setFrame:。在這種情況下,您的setFrame:調(diào)用不會(huì)產(chǎn)生新的約束,因此單獨(dú)的約束之間不會(huì)發(fā)生沖突。但是,在這種情況下,約束和您設(shè)置的幀值之間仍然存在“沖突” 。下次調(diào)用自動(dòng)布局時(shí),它將在視圖上看到已經(jīng)存在的約束,計(jì)算它們所需的框架值,并將框架設(shè)置為所需的值本身,從而破壞了您手動(dòng)設(shè)置的值。


有關(guān)更多詳細(xì)信息,請(qǐng)查看Apple的Cocoa自動(dòng)布局指南中的 “采用自動(dòng)布局”部分。


查看完整回答
反對(duì) 回復(fù) 2019-11-25
?
Helenr

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊

對(duì)我來說,最簡(jiǎn)單的事情是從其超級(jí)視圖中刪除要移動(dòng)/調(diào)整大小的視圖,設(shè)置其frame,然后重新添加。例如,UILabel在UITableViewCell子類中采用自定義:


[cell.myLabel removeFromSuperview];

cell.myLabel.frame = someFrameIGenerated;

[cell.contentView addSubview:cell.myLabel];


查看完整回答
反對(duì) 回復(fù) 2019-11-25
  • 3 回答
  • 0 關(guān)注
  • 633 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)