我有10个UIButtons,一个比另一个低。我想根据iPhone的屏幕尺寸改变它的高度。它在iPhone 6 plus屏幕上应该看起来更大,在iPhone 5s屏幕上看起来更小。如何使用autolayout来实现。
发布于 2016-12-01 04:10:57
为此,您必须根据设备屏幕大小的百分比(%)添加每个按钮的高度。因此按钮大小可以根据设备(iPhone4s、5s、6 plus)屏幕大小而变化。
现在,我将使用KVConstraintExtensionsMaster库以编程方式添加约束。通过从ViewController的viewDidLoad调用下面的方法来尝试下面的代码。
- (void)configureScrollViewHierarchyAndApplyConstraint
{
CGFloat mainScreenHeight = [[UIScreen mainScreen] bounds].size.height;
// here baseScreenHeight is default screen height size for which we are implementing.
CGFloat baseScreenHeight = 667; // here default iPhone 6 height
// Note: try by changing baseScreenHeight via any iPhone screen height(480, 568, 667, 736) and see the changes in button height & space
// here fixed space and height are fixed size with respect to iPhone 6 height.
CGFloat fixedSpace = 28;
CGFloat fixedHeight = 150;
// ratio is responsible to increase or decrease button height depends on iPhone device size.
CGFloat ratio = mainScreenHeight/baseScreenHeight;
CGFloat baseSpace = fixedSpace * ratio;
CGFloat baseHeight = fixedHeight * ratio;
// prepare scrollView for autolayout
UIScrollView *scrollView = [UIScrollView prepareNewViewForAutoLayout];
scrollView.backgroundColor = [UIColor brownColor];
[self.view addSubview:scrollView];
// prepare containerView for autolayout
UIView *containerView = [UIView prepareNewViewForAutoLayout];
containerView.backgroundColor = [UIColor colorWithWhite:1 alpha:0.95];
[scrollView addSubview:containerView];
// To add Leading and Trailing constraint
[scrollView applyLeadingAndTrailingPinConstraintToSuperviewWithPadding:baseSpace];
// To add Top and Bottom constraint
[scrollView applyTopAndBottomPinConstraintToSuperviewWithPadding:baseSpace];
// To add Top and Bottom constraint of containerView
[containerView applyTopAndBottomPinConstraintToSuperviewWithPadding:0];
// To Define the containerView X Position by adding HorizontalCenter constraint
[containerView applyConstraintForHorizontallyCenterInSuperview];
// Here To Define the width
[containerView applyEqualWidthPinConstrainToSuperview]; // Or
//[containerView applyLeadingPinConstraintToSuperviewWithPadding:10];
NSInteger count = 20;
UIButton *previousContentButton = nil;
for (NSInteger i = 0; i < count; i++)
{
UIButton *contentButton = [UIButton prepareNewViewForAutoLayout];
if (i&1) {
[contentButton setBackgroundColor:[UIColor greenColor]];
}else{
[contentButton setBackgroundColor:[UIColor redColor]];
}
[contentButton setTag:i];
[containerView addSubview:contentButton];
// Define the contentButton Size
[contentButton applyLeadingAndTrailingPinConstraintToSuperviewWithPadding:baseSpace];
[contentButton applyHeightConstraint:baseHeight];
if (i == 0) // for first
{
// To add top constraint
[contentButton applyTopPinConstraintToSuperviewWithPadding:baseSpace];
}
else if (i == count-1) // for last
{
// To add vertical constraint between two buttons
[previousContentButton applyConstraintFromSiblingViewAttribute:NSLayoutAttributeBottom toAttribute:NSLayoutAttributeTop ofView:contentButton spacing:baseSpace];
// To add bottom constraint
[contentButton applyBottomPinConstraintToSuperviewWithPadding:baseSpace];
}
else
{
// To add vertical constraint between two buttons
[previousContentButton applyConstraintFromSiblingViewAttribute:NSLayoutAttributeBottom toAttribute:NSLayoutAttributeTop ofView:contentButton spacing:baseSpace];
}
previousContentButton = contentButton;
}
[containerView updateModifyConstraints];
}https://stackoverflow.com/questions/40734110
复制相似问题