2015-05-07 81 views
0

我現在有這些的tableView細胞:Objective-C的VisualFormatString - 標籤和TextField並排寬度優先的TextField

enter image description here

每個小區是相同類型的。每個在左側都有一個UILabel,在右側有一個UITextField。有些時候數據可能會在加載時傳遞到文本字段中,其他時間用戶將手動輸入數據到這些字段中。

一切都以編程方式完成。沒有故事板。我正在使用Visual Format Strings來設置單元格的樣式。

這是我的問題:
我希望標籤的寬度隨着給定的內容和文本字段的寬度增長,以填充單元格中剩餘的可用空間。

這裏是我的代碼:

NSDictionary* views = @{ @"bsyLeftLabel": self.bsyLeftLabel, @"bsyRightGenericTextField": self.bsyRightGenericTextField }; 

    [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"H:|-18-[bsyLeftLabel]-[bsyRightGenericTextField]-18-|"] 
                      options:0 
                      metrics:nil 
                       views:views]]; 

正如你可以看到我有與標籤和文本字段之間的默認間距單元格的左右兩端一個18點的填充。

如何獲得標籤的寬度與其中的文本一樣大,以及用於填充單元剩餘寬度的文本字段?

非常感謝您的幫助。

回答

0

該代碼給你帶來了什麼結果?當我在故事板上做同樣的設置時,我會得到你想要的結果。如果你沒有得到這個結果,你可能需要將標籤的內容擁抱優先級設置爲比文本字段更高的值(在故事板中,你會自動獲得該值,但我不知道是否會發生這種情況碼)。

如果您始終希望標籤完全顯示其文本,則還需要將其內容壓縮阻力提高到高於文本字段(默認爲750)的級別。

[self.label setContentCompressionResistancePriority: 751 forAxis:UILayoutConstraintAxisHorizontal]; 
+0

上面的代碼給了我你在圖片中看到的內容。 –

+0

@KraigWastlund,你是否嘗試設置內容擁抱優先級,因爲我建議? – rdelmar

+0

設置擁抱標籤上的內容,但現在文本字段的內容會覆蓋標籤的內容。我需要設置標籤的寬度,使其始終與其中的文字一樣大。問題是,在設置我的約束的地方,我無法訪問標籤內的文本。有沒有辦法讓標籤始終與您的內容一樣大? –

0

你嘗試在您的UILabel增加寬度> = 0的約束:@"bsyLeftLabel(>=0)",使之適應它的內容?

+0

是的。該標籤已正確調整大小。 –

0

設置bsyLeftLabel的內容抱死爲比的bsyRightGenericTextField較高,因此標籤將是「擁抱」,圍繞它的內容,則文本字段將自動擴展到空間的其餘部分:

[self.bsyLeftLabel setContentHuggingPriority:NSLayoutPriorityRequired 
         forOrientation:NSLayoutConstraintOrientationHorizontal];