在我的iPad應用程序中,我將在彈出窗口中顯示一個UITableView
。我有多個要顯示的值,因此我使用多個標籤自定義了UITableViewCell
,以模擬表格中的許多「列」。我想要做的是確保我所有的「專欄」都會排成一列。具有自動佈局的UITableView中的動態列
問題是,我無法硬編碼我的列的寬度,因爲我動態地填充XML webservice中的數據 - 所以我不知道需要多大的範圍,直到我發出這個調用並收到數據。
我的想法是循環訪問數據(一旦得到它),並使用sizeWithAttributs:
方法NSString
獲得每個列的最大寬度。然後,我會將該寬度發送到我的自定義單元格,以便單元格可以在其layoutSubviews
方法中使用它。問題是,我試圖用NSLayoutConstraints
來做所有這些事情,並且在所有我見過的例子中,constraintsWithVisualFormat:
中的任何尺寸都是硬編碼的 - 直到運行時我才知道我的尺寸是多少。我的想法是做類似
NSDictionary *myDictionary = NSDictionaryOfVariableBindings(myLabel1,myLabel2)
NSArray *myConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[myLabel1(%d)]-[myLabel2(%d)]",myWidth1,myWidth2 options:NSLayoutFormatAlignAllBaseline metrics:nil views:myDictionary];
但是這會導致構建錯誤。是否可以在運行時動態提供尺寸爲而不是硬編碼?
爲什麼採用這種方式推薦使用我的方式,是否有特定的原因?使用這些指標對我來說似乎並不簡單(我會認爲它更復雜)。此外,我不記得看到用於將值鏈接到臨時變量的'metrics'字典,僅用於其他參數,但我看到大量的傳遞'[NSString stringWithFormat:@「的實例。 。「'''當'NSString'被請求作爲輸入類型時,而不是'@」...'''。我想我只是有點困惑,爲什麼約束應該做任何不同。 – GeneralMike
建議不要使用字符串格式*本身*。由於自動佈局的可視格式解析器無論如何都要進行字符串解析工作,所以您最好告訴它用一些名稱替換它們的數值。你的方式使字符串解析發生兩次。而且,實際的名字總會比一堆'%d'更具可讀性。最後,如果您要多次重複使用相同的值,這種方式將證明自己的方便。 – matehat
此外,如果要重新使用具有不同寬度或邊距的可視格式,或者在可視格式中重複使用一組寬度/邊距,則會更清晰。這是值得圍繞你的頭! – matehat