NSSplitView 使用技巧

隨筆分享幾個(gè)最近開(kāi)發(fā)中遇到的坑和小技巧:

1. 縮放窗口時(shí)保持首列面板大小

默認(rèn)情況下题诵,當(dāng)用戶(hù)縮放窗口大小時(shí),Split View 會(huì)自動(dòng)調(diào)整中軸的位置缰贝,保持原有左右兩側(cè)的寬度比例不變嘱么,但這樣兩側(cè)面板的大小就都發(fā)生改變了,如果我們想鎖定一側(cè)的面板大小柒傻,可以使用下面這個(gè)小 trick:

首先設(shè)置 NSSplitViewdelegate 屬性孝赫,為其賦一個(gè)代理對(duì)象,實(shí)現(xiàn) splitView:resizeSubviewsWithOldSize: 方法:

- (void)splitView:(NSSplitView *)splitView resizeSubviewsWithOldSize:(NSSize)oldSize {
    CGFloat oldWidth = splitView.arrangedSubviews.firstObject.frame.size.width;
    [splitView adjustSubviews];
    [splitView setPosition:oldWidth ofDividerAtIndex:0];
}

簡(jiǎn)單解釋一下這段代碼红符,文檔中指出青柄,如果代理實(shí)現(xiàn)了該方法,那么 Split View 在被改變大小時(shí)不會(huì)做出任何布局操作预侯,而是需要開(kāi)發(fā)者自己實(shí)現(xiàn)布局邏輯致开。這里使用 adjustSubviews 方法可以借用一下未實(shí)現(xiàn)該代理方法時(shí)的布局邏輯,但如果單純調(diào)用它萎馅,中軸位置還是會(huì)改變双戳,因此我們可以在調(diào)用它之前先記錄一下中軸的位置,其位置就是第一個(gè)面板的寬度糜芳。然后執(zhí)行默認(rèn)布局邏輯飒货,最后我們?cè)僬{(diào)整中軸位置為之前記錄下的位置就 OK 了!

2. 限制面板最大最小尺寸

通常來(lái)講峭竣,我們不希望兩側(cè)面板的大小可以無(wú)限調(diào)整塘辅,最左側(cè)的面板一般會(huì)被限制在一定范圍內(nèi)。這里我們可以通過(guò)實(shí)現(xiàn) splitView:constrainMinCoordinate:ofSubviewAt: 代理方法來(lái)做出限制皆撩,如果 Split View 中只有兩個(gè) View扣墩,可以這么寫(xiě):

- (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex {
    return 200;
}

這樣,左側(cè)面板的寬度就不能小于 200 了扛吞,最大值同理呻惕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市滥比,隨后出現(xiàn)的幾起案子蟆融,更是在濱河造成了極大的恐慌,老刑警劉巖守呜,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件型酥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡查乒,警方通過(guò)查閱死者的電腦和手機(jī)弥喉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)玛迄,“玉大人由境,你說(shuō)我怎么就攤上這事。” “怎么了虏杰?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵讥蟆,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我纺阔,道長(zhǎng)瘸彤,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任笛钝,我火速辦了婚禮质况,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘玻靡。我一直安慰自己结榄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布囤捻。 她就那樣靜靜地躺著臼朗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蝎土。 梳的紋絲不亂的頭發(fā)上视哑,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音瘟则,去河邊找鬼。 笑死枝秤,一個(gè)胖子當(dāng)著我的面吹牛醋拧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播淀弹,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼丹壕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了薇溃?” 一聲冷哼從身側(cè)響起菌赖,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎沐序,沒(méi)想到半個(gè)月后琉用,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡策幼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年邑时,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片特姐。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晶丘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浅浮,我是刑警寧澤沫浆,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站滚秩,受9級(jí)特大地震影響专执,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜叔遂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一他炊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧已艰,春花似錦痊末、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至嚼吞,卻和暖如春盒件,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舱禽。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工炒刁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人誊稚。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓翔始,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親里伯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子城瞎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容