2016-06-08 23 views
0

按钮的比例调整大小我需要布置5个按钮作为该图像中:figure 1在UIStackView

我需要他们按比例调整在不同设备上。

我有一个方法设置了5个按钮的视图中的代码。

UIStackView *stackView = [[UIStackView alloc]init]; 

// Add buttons to stackView (buttons are initialised) 
[stackView addArrangedSubview:_button1]; 
[stackView addArrangedSubview:_button2]; 
[stackView addArrangedSubview:_button3]; 
[stackView addArrangedSubview:_button4]; 
[stackView addArrangedSubview:_button5]; 

stackView.translatesAutoresizingMaskIntoConstraints = false; 
[self.view addSubview:stackView]; 

stackView.axis = UILayoutConstraintAxisVertical; 
stackView.distribution = UIStackViewDistributionFillEqually; 
stackView.spacing = 5; 

//Layout Constraints for stackView 
[stackView.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor].active = true; 
[stackView.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor].active = true; 

// 80% of screen height should be used for buttons 
CGFloat screenHeightAvailableForButtons = 80/100; 
// Calculate multiplier for height of the buttons (5 buttons) 
CGFloat buttonMultiplier = screenHeightAvailableForButtons /5; 
// 25% of screen width should be used for buttons 
CGFloat screenWidthMultiplier = 25/100; 

[_button1.widthAnchor constraintEqualToAnchor:self.view.widthAnchor multiplier: screenWidthMultiplier].active = true; 
[_button1.heightAnchor constraintEqualToAnchor: self.view.heightAnchor multiplier: buttonMultiplier].active = true; 

[_button2.widthAnchor constraintEqualToAnchor:self.view.widthAnchor multiplier: screenWidthMultiplier ].active = true; 
[_button2.heightAnchor constraintEqualToAnchor: self.view.heightAnchor multiplier: buttonMultiplier].active = true; 

[_button3.widthAnchor constraintEqualToAnchor:self.view.widthAnchor multiplier: screenWidthMultiplier ].active = true; 
[_button3.heightAnchor constraintEqualToAnchor: self.view.heightAnchor multiplier: buttonMultiplier].active = true; 

[_button4.widthAnchor constraintEqualToAnchor:self.view.widthAnchor multiplier: screenWidthMultiplier ].active = true; 
[_button4.heightAnchor constraintEqualToAnchor: self.view.heightAnchor multiplier: buttonMultiplier].active = true; 

[_button5.widthAnchor constraintEqualToAnchor:self.view.widthAnchor multiplier: screenWidthMultiplier ].active = true; 
[_button5.heightAnchor constraintEqualToAnchor: self.view.heightAnchor multiplier: buttonMultiplier].active = true; 

此代码返回空白视图。我是否错误地使用了方法?
我无法弄清楚我做错了什么。我需要在目标c中以编程方式完成此操作。

感谢

+0

请详细说明“我需要他们在不同设备上按比例调整。”就像“如果堆栈视图高度是xxx按钮偏移量是xx,那么按钮高度应该是xxx”,并且与宽度类似。 – BangOperator

+0

@BangOperator我需要它看起来像是在所有设备上提供的图像,我需要以编程方式而不是IB。因此,在横向模式下,stackView.height = screen.height从顶部和底部减去20个点,button.height =每个按钮之间5点间距的stackView的1/5。和stackView.width = screen.width和1/4距离左边缘20点,button.width = stackView.width。希望有道理 – sharp

回答

1

对于你的情况,你不需要设置按钮堆栈视图里面的约束。堆栈视图将自动处理。

试试这个

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    UIStackView *stackView = [[UIStackView alloc]initWithFrame:self.view.bounds]; 
    stackView.backgroundColor = [UIColor darkGrayColor]; 
    _button1 = [UIButton buttonWithType:UIButtonTypeSystem]; 
    [_button1 setTitle:@"Button 1" forState:UIControlStateNormal]; 
    _button1.translatesAutoresizingMaskIntoConstraints = NO; 
    _button1.backgroundColor = [UIColor lightGrayColor]; 

    _button2 = [UIButton buttonWithType:UIButtonTypeSystem]; 
    [_button2 setTitle:@"Button 2" forState:UIControlStateNormal]; 
    _button2.translatesAutoresizingMaskIntoConstraints = NO; 
    _button2.backgroundColor = [UIColor lightGrayColor]; 

    _button3 = [UIButton buttonWithType:UIButtonTypeSystem]; 
    [_button3 setTitle:@"Button 3" forState:UIControlStateNormal]; 
    _button3.translatesAutoresizingMaskIntoConstraints = NO; 
    _button3.backgroundColor = [UIColor lightGrayColor]; 


    _button4 = [UIButton buttonWithType:UIButtonTypeSystem]; 
    [_button4 setTitle:@"Button 4" forState:UIControlStateNormal]; 
    _button4.translatesAutoresizingMaskIntoConstraints = NO; 
    _button4.backgroundColor = [UIColor lightGrayColor]; 

    _button5 = [UIButton buttonWithType:UIButtonTypeSystem]; 
    [_button5 setTitle:@"Button 5" forState:UIControlStateNormal]; 
    _button5.translatesAutoresizingMaskIntoConstraints = NO; 
    _button5.backgroundColor = [UIColor lightGrayColor]; 

    // Add buttons to stackView (buttons are initialised) 
    [stackView addArrangedSubview:_button1]; 
    [stackView addArrangedSubview:_button2]; 
    [stackView addArrangedSubview:_button3]; 
    [stackView addArrangedSubview:_button4]; 
    [stackView addArrangedSubview:_button5]; 

    stackView.translatesAutoresizingMaskIntoConstraints = false; 
    [self.view addSubview:stackView]; 

    stackView.axis = UILayoutConstraintAxisVertical; 
    stackView.distribution = UIStackViewDistributionFillEqually; 
    stackView.alignment = UIStackViewAlignmentFill; 
    stackView.spacing = 5; 

    //Layout Constraints for stackView 
    [stackView.layoutMarginsGuide.topAnchor constraintEqualToAnchor:self.view.layoutMarginsGuide.topAnchor].active = true; 
    [stackView.layoutMarginsGuide.bottomAnchor constraintEqualToAnchor:self.view.layoutMarginsGuide.bottomAnchor].active = true; 
    // 25% of screen width should be used for buttons 
    [stackView.widthAnchor constraintEqualToAnchor:self.view.widthAnchor multiplier:25.0/100.0].active = true; 
    [stackView.layoutMarginsGuide.centerXAnchor constraintEqualToAnchor:self.view.layoutMarginsGuide.centerXAnchor].active = true; 

} 
+0

谢谢先生。我知道我也可以使用'constraintEqualToAnchor:constant:'来进一步向约束添加一个'常量'值,以便在任何我想要的屏幕上定位stackView!伟大的东西;) – sharp

+0

@DannyHuseyin如果这个thas回答了您的问题,将其标记为已回答。 – BangOperator

+0

完成。当我的代表允许的时候,我会确定我会赞成 – sharp