ios 中用xib 怎么设置与父视图水平中心点对齐

 我来答
yy...j@163.com
2017-05-31 · TA获得超过261个赞
知道答主
回答量:303
采纳率:0%
帮助的人:81.9万
展开全部
前做Web前端页面伙伴看绝定位相定位并陌并且使用起挺便IOSUI设计绝定位相定位我web前端绝定位相定位所同相似处面结合两demo习我IOS发UI绝定位相定位前面博客所用UI事例用全绝定位用我Storyboard拖拽控件全绝定位我同改变组件frame改变组件位置相定位则同相定位参考组件周围元素确定组件或位置相定位即约束周围组件距离布局即layoutConstraint. 布局LayoutConstraintFram布局式能并存

面说能说太明白句能少代码实例支持呢面通屏幕适配事例用绝布局相布局同实现面描述效

我要实现效:面view及位置改变覆盖掉面view,我同要改变view位置 或者说我4.0寸显示内容3.5寸屏能显示即通我所说屏幕适配便于观察效我用Slider控件态改变面view观察面view位置变化面我要实现效图:

1.用绝布局实现述效节省我代码编写间面控件通storyborad实现应ViewController添加组件控件调主要slider滑候获取slider值态设置面Viewframe坐标(让view往四周扩展计算新fram值态修改)面view位置改变面view能面覆盖掉所修改blackViewfram值种通修改frame值式确定组件位置即绝布局

面由storyboard拖拽属性:

//边view拖拽我代码
@property (strong, nonatomic) IBOutlet UIView *myView;
//添加slider
@property (strong, nonatomic) IBOutlet UISlider *mySlider;
//添加面黑色view
@property (strong, nonatomic) IBOutlet UIView *blackView;
面slider值改变要调:

//slider值改变候调
- (IBAction)sliderFunction:(id)sender
{
//获取slider前值(storyboard设置范围0-120)
double value = self.mySlider.value;

//获取myView位置
CGRect frame = self.myView.frame;

//根据slider值态设置myView坐标宽高设置候view变
frame.origin.x = 120-value;
frame.origin.y = 66 * (1-value/120);
frame.size.height = 320-frame.origin.x*2;
frame.size.width = 320-frame.origin.x*2;

//更新myView位置
self.myView.frame = frame;
//同改变面黑色view坐标
CGRect bf = self.blackView.frame;
bf.origin.y = frame.size.height + frame.origin.y + 30;
self.blackView.frame = bf;

}

2.面我绝布局式接要习相布局式相布局使用起比绝布局要复杂些面先做屏幕适配例图iPhone4.0寸效图 我做任何处理候3.5寸屏显示第二张图:

(1)我何让3.5寸屏显示呢接啦相布局场候我用相布局式面view位置改相于主视图底部左边像素值固定同设置slider位置相于面view位置相固定面veiw位置改变则面slider位置改变用storyboard修改:(第张图修改面view相位置第二张图设置我slider相布局) 需要ViewController添加任何态我实现屏幕适配

(2)我何用相布局实现面种view放效呢接我需要新建工程相布局绝布局同组件并存新建工程用storyboard我用控件进行拖拽 界面面

(1)首先给我面View设置相布局属性面图

(2) 再给黑色View设置相布局属性入面图二所示:

(3) 设置面两View相齐选面View,按着Ctrl往面View拖拽弹框选Center X入图三

(4).给我相应组件storyboard添加约束态改变面view宽高约束范围呢(即改变水平约束垂直约束值)第部面view水平约束垂直约束我storyboard面View我要用约束拖入我Viewcontroller, 第张图storyboard约束所位置第二张图约束添加ViewController

          

(5)至我用storyboard工作已经做完程序员少敲代码八经敲代码程序员才所喽面我ViewController添加代码部绝布局直接改frame坐标值啦程序我何态改变我约束值呢面代码用 我要做事情ViewController通改变slider值改变面View水平约束垂直约束水平约束垂直约束相关变量我已经拖拽面需要Slider调改变水平垂直约束值先段代码说两句

//slider值改变调用
- (IBAction)sliderChange:(id)sender
{
//避免冲突移除myView水平垂直约束,注意主视图移除约束加载我主视图即相于我主视图
[self.view removeConstraint:self.widthC];
[self.view removeConstraint:self.heightC];

//获取slider值
double sliderValue = self.mySlider.value;

//由slider值重设我约束值,H代表水平约束 V代表垂直约束
NSString *widthValue = [NSString stringWithFormat:@"H:[_myView(%lf)]", sliderValue];
NSString *heightValue = [NSString stringWithFormat:@"V:[_myView(%lf)]", sliderValue];

//新建约束
NSArray *widthConstraint = [NSLayoutConstraint constraintsWithVisualFormat:widthValue options:0 metrics:nil views:NSDictionaryOfVariableBindings(_myView)];
//给水平约束重新赋值
self.widthC = widthConstraint[0];

//给垂直约束重新赋值
NSArray * heightConstraint = [NSLayoutConstraint constraintsWithVisualFormat:heightValue options:0 metrics:nil views:NSDictionaryOfVariableBindings(_myView)];
self.heightC = heightConstraint[0];

//往主视图添加新约束
[self.view addConstraint:self.widthC];
[self.view addConstraint:self.heightC];
}
代码说明:

1.组件能约束myView我已经垂直约束我再给添加垂直约束程序运行报错错误内容:Unable to simultaneously satisfy constraints.……;

2.所添加新约束前我前加我组件相应约束给掉;约束加我应组件父视图移除组件父视图移除;

3.设置约束值候我字符串形式参数传递给约束:H:[_myView(200)] H代表水平约束V代表垂直约束括号我要组件添加约束及约束值少;

4.给我约束更新我新建约束;

5.更新约束添加我父视图我实现面我面用绝布局实现功能

补充说明:

绝布局我获取屏幕尺寸通屏幕尺寸计算我组件所位置主要代码:

//获取屏幕
UIScreen *s = [UIScreen mainScreen];
//获取屏幕边界
CGRect bounds = s.bounds;
//获取屏幕高度
float height = bounds.size.height;
l
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式