我正在为其他人制作的应用创建iOS6的兼容性。我习惯使用自动化蒙版制作按钮/ UI元素,但是当你以编程方式创建按钮时,我真的不知道它们是如何工作的。
例如:
- (UIButton*) createSampleButton {
UIButton* b = createSampleViewButton(CGRectMake(67, 270, 191, 45),
@"btn_shuffle",
@"btn_shuffle_active",
self,
@selector(sampleAction));
b.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;
[self attachButton:b];
return b;
}
如何更改这些按钮,使它们按照某种比例/边距放置,而不是任意选择点,直到所有“看起来都正确”?
我想的是:
- (UIButton*) createSampleButton {
CGFloat height = self.bounds.size.height;
CGFloat bottomBound = 80;
UIButton* b = createSampleViewButton(CGRectMake(67, height-bottomBound, 191, 45),
@"btn_shuffle",
@"btn_shuffle_active",
self,
@selector(sampleAction));
[self attachButton:b];
return b;
}
这样可以保证按钮每次都放在离屏幕底部80个点的位置吗?有没有更优雅或有目的的方式来做到这一点?
答案 0 :(得分:0)
掩码与在IB或代码中创建的掩码相同。您希望确保在代码中执行的操作是确保框架按比例正确设置一次。在你的情况下,是的,你确实需要UIViewAutoResizingFlexibleTopMargin,并在y = parentView.bounds.size.height - (如你所描述的x点)方面在原点上设置正确的y值,这就是你需要做的。
编辑: 根据您更新的问题,也许这会对您有所帮助。如果按钮具有恒定大小,请在创建按钮时使用CGPointZero作为原点将帧设置为该大小。如果UIView拥有该按钮,则将此代码放在layoutSubviews中。如果UIViewController拥有该按钮,则将self.bounds替换为self.view.bounds并将其置于视图中(Will / Did)LayoutSubviews(假设iOS5 +)。
// Aligning the button at it's current x value, current size, with its bottom border margin pizels from the bottom of the parent view.
CGFloat margin = 10;
CGRect buttonFrame = button.frame;
buttonFrame.origin.y = self.bounds.size.height - buttonFrame.size.height - margin;
button.frame = buttonFrame;
此外,在实现文件的顶部定义常量值。随意创建方便的可读性方法(如果你发现它更具可读性,而不是在一行上做太多),例如
CGRect CGSetYInRect(CGFloat y, CGRect rect)
...
button.frame = CGSetYInRect(self.bounds.size.height - button.frame.size.height - margin, button.frame);
在适当时使用AutoResizing以避免layoutSubviews中的显式逻辑。
当您仅转移到iOS 6 +时,请使用AutoLayout。