所以,我最終做的是建立4個出口爲4個不同的約束條件:
1. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *eventNameBottomMargin;
2. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *eventNameLeftMargin;
3. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *bottomMarginConstraint;
4. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *rightMarginConstraint;
約束1,2都爲UILabel
左下方;限制3,4爲UILabels
在右邊:使用Tj3n
的建議我把它們放在UIView
,所以然後3,4是UIView
相對於背景UIImageView
的限制。
然後我在代碼中根據設備寬度變化的約束值:
- (void)awakeFromNib
{
[super awakeFromNib];
CGRect screenRect = [[UIScreen mainScreen] bounds];
NSNumber *screenWidth = @(screenRect.size.width);
[self setFontsOnDeviceWithScreenWidth:screenWidth];
int rightMargin = 15;
int bottomMargin = -105;
int nameLeftMargin = 55;
int nameBottomMargin = -33;
if (screenWidth.intValue == 320) {
// iPhone 5 screenWidth = "320"
rightMargin = 5;
bottomMargin = -105;
nameLeftMargin = 50;
nameBottomMargin = -36;
} else if(screenWidth.intValue == 375) {
// iPhone 6s
rightMargin = 15;
bottomMargin = -105;
nameLeftMargin = 80;
nameBottomMargin = -30;
} else if(screenWidth.intValue == 414) {
// iPhone 6s Plus
rightMargin = 35;
bottomMargin = -108;
nameLeftMargin = 100;
nameBottomMargin = -30;
}
self.rightMarginConstraint.constant = rightMargin;
self.bottomMarginConstraint.constant = bottomMargin;
self.eventNameLeftMargin.constant = nameLeftMargin;
self.eventNameBottomMargin.constant = nameBottomMargin;
}
我不認爲這是問題的最佳解決方案,但它是可以正常使用。應該有一種方法來指定約束,然後調整大小會自動進行,所以如果有人知道,請分享進一步的想法。
哪個項目被限制爲前導邊緣或後邊緣? 「活動日數量」僅限於位置和星期幾標籤的中心位置。其中之一是否受限於領先/尾隨? – Paulw11
我更新了附加屏幕截圖的問題,請大家看看。另外,對於左下角的標籤,我希望避免移位。 –
我也在動態地改變字體,但在這裏並不重要,因爲即使我爲所有的屏幕尺寸設置了相同的事情。 –