- (void)viewDidLoad { [super viewDidLoad]; UIButton *btnBack = [UIButton buttonWithType:UIButtonTypeCustom]; btnBack.frame = CGRectMake(10, 10, 50, 30); [btnBack setImage:[UIImage imageNamed:@"sp_btn_back"] forState:UIControlStateNormal]; [self.view addSubview:btnBack]; UIButton *btnShare = [UIButton buttonWithType:UIButtonTypeCustom]; btnShare.frame = CGRectMake(270, 10, 50, 30); [btnShare setImage:[UIImage imageNamed:@"sp_btn_share"] forState:UIControlStateNormal]; [self.view addSubview:btnShare]; UIButton *btnDetail = [UIButton buttonWithType:UIButtonTypeCustom]; btnDetail.frame = CGRectMake(10, 380, 50, 30); [btnDetail setImage:[UIImage imageNamed:@"night_search_category_news"] forState:UIControlStateNormal]; [self.view addSubview:btnDetail]; UIButton *btnLikes = [UIButton buttonWithType:UIButtonTypeCustom]; btnLikes.frame = CGRectMake(270, 380, 50, 30); [btnLikes setImage:[UIImage imageNamed:@"sp_btn_share"] forState:UIControlStateNormal]; [self.view addSubview:btnLikes]; [btnBack setTranslatesAutoresizingMaskIntoConstraints:NO]; [btnShare setTranslatesAutoresizingMaskIntoConstraints:NO]; [btnDetail setTranslatesAutoresizingMaskIntoConstraints:NO]; [btnLikes setTranslatesAutoresizingMaskIntoConstraints:NO]; NSDictionary *views = NSDictionaryOfVariableBindings(self.view, btnBack, btnShare, btnDetail, btnLikes); [self.view addVisualConstraints:@"|-10-[btnBack]" forViews:views]; [self.view addVisualConstraints:@"[btnShare]-10-|" forViews:views]; [self.view addVisualConstraints:@"|-10-[btnDetail]" forViews:views]; [self.view addVisualConstraints:@"V:[btnDetail]-10-|" forViews:views]; [self.view addVisualConstraints:@"[btnLikes]-10-|" forViews:views]; [self.view addVisualConstraints:@"V:[btnLikes]-10-|" forViews:views]; }
#import "UIView+Constraint.h" @implementation UIView (Constraint) - (void)addVisualConstraints:(NSString *)constraintString forViews:(NSDictionary *)views { [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:constraintString options:0 metrics:0 views:views]]; } @end
Visual Format Syntax
The following are examples of constraints you can specify using the visual format. Note how the text visually matches the image.
[button]-[textField]
[button(>=50)]
|-50-[orchidBox]-50-|
V:[topField]-10-[bottomField]
[maroonView][oceanView]
[button(100@20)]
[button1(==button2)]
[flexibleButton(>=70,<=100)]
|-[find]-[findNext]-[findField(>=20)]-|
The notation prefers good visualization over completeness of expressibility. There are constraints that cannot be expressed in visual format syntax, although most of the constraints that are useful in real user interfaces can be. One useful constraint that cannot be expressed is a fixed aspect ratio (for example,imageView.width = 2 * imageView.height
). To create such a constraint, you must useconstraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
.
Visual Format String Grammar
The visual format string grammar is defined as follows (literals are shown in code font
; e denotes the empty string).
<visualFormatString> |
(<orientation>:)? (<superview><connection>)? <view>(<connection><view>)* (<connection><superview>)? |
<orientation> |
|
<superview> |
|
<view> |
|
<connection> |
e| |
<predicateList> |
<simplePredicate>|<predicateListWithParens> |
<simplePredicate> |
<metricName>|<positiveNumber> |
<predicateListWithParens> |
|
<predicate> |
(<relation>)?(<objectOfPredicate>)( |
<relation> |
|
<objectOfPredicate> |
<constant>|<viewName> (see note) |
<priority> |
<metricName>|<number> |
<constant> |
<metricName>|<number> |
<viewName> |
Parsed as a C identifier. This must be a key mapping to an instance of |
<metricName> |
Parsed as a C identifier. This must be a key mapping to an instance of |
<number> |
As parsed by |
Note: For the objectOfPredicate
production, a viewName
is only acceptable if the subject of the predicate is the width or height of a view. That is, you can use[view1(==view2)]
to specify that view1
and view2
have the same width.
参考自:
http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/AutolayoutPG/Articles/formatLanguage.html
相关推荐
但要注意,虽然XIB方便了界面设计,但在大型项目中,过度依赖XIB可能会导致编译速度变慢,因此合理平衡使用XIB和代码布局是必要的。 总结来说,iOS中的XIB文件是创建自定义View的重要工具,它简化了界面设计并促进...
在iOS应用开发中,XIB(Interface Builder Document)文件用于设计和组织用户界面。XIB文件可以独立于代码存在,提供了可视化布局的方式,方便开发者快速构建UI。本篇将详细讲解如何在iOS App中实现XIB之间的跳转,...
在iOS开发中,为了提高代码复用性和降低项目复杂度,开发者经常需要封装自定义控件。本教程将深入探讨如何创建一个既能通过纯代码编写,也能与XIB(Interface Builder)结合使用的通用控件。我们将以“myViewDemo”...
iOS自动布局及适配iPhone6的知识点涵盖了iOS应用开发中界面布局与适配的关键技术,主要包括自动布局(Auto Layout)的使用、屏幕分辨率和像素的处理,以及使用Size Classes来适配不同尺寸的屏幕。 1. 自动布局...
我们可以使用xib布局设计控件,然后使用工具自动生成相应的纯代码,这样可以节省开发时间和精力。 下面是一个使用xib上控件自动生成纯代码的示例: 首先,我们需要下载一个动态库,并将其拖进工程中。然后,在xib...
细谈屏幕适配和界面开发辅助工具
本文将详细介绍如何通过代码布局和XIB两种方式来创建自定义的TableView Cell。 首先,我们来看代码布局的方式。这种方式适合于对AutoLayout有深入理解的开发者,因为它需要手动设置cell内各个视图的约束。步骤如下...
在iOS开发中,XIB文件常用于替代代码硬编码的方式来创建UI,提供更加直观和易于维护的设计方式。XIB文件可以包含多个视图组件,如UILabel、UIButton等,以及它们之间的约束关系。 **步骤1:创建XIB文件** 在Xcode...
这种方式对于初学者或者对UI设计有较高要求的开发者来说非常友好,可以直观地调整单元格的样式和布局。在XIB中,你可以设置cell的约束,定义其内容视图,添加自定义控件,并配置交互事件。同时,XIB还支持Interface ...
在iOS开发中,当应用程序升级到iOS7时,开发者可能会遇到一些与用户界面相关的适配问题,特别是因为iOS7引入了全新的设计语言和状态栏透明特性。本篇将深入探讨如何解决iOS7中XIB(XML Interface Builder)文件在...
GitHub地址: https://github.com/JohnnyHooo/HJViewStyle 特点: xib零代码和代码快速设置View各种样式 阴影和圆角并存 渐变色背景 根据主题色快速设置渐变背景色 pod 'HJViewStyle'
总的来说,“ExcelView”项目为iOS开发者提供了一个很好的学习案例,它展示了如何自定义`UITableView`以实现更高级的功能,比如XIB布局、代码布局和双向表头锁定。开发者可以通过研究这个项目,了解并掌握这些技术,...
nib2objc是一个小巧的转换工具,可以将XIB文件自动转换为Objective-C的源代码文件。 通常,考虑到程序的效率时,才将XIB直接转换为源代码文件。但是这样一来,通过Interface Builder设定的实例变量与行为方法的接续...
"xib和手写代码自定义UITableViewCell"这个主题涵盖了两种主要的自定义方式:通过故事板(XIB)和纯代码实现。下面我们将深入探讨这两种方法及其优缺点。 **一、手写代码自定义UITableViewCell** 手写代码是一种...
- 使用Auto Layout或Size Classes确保Cell和布局能适应不同设备和屏幕方向。 通过学习和实践这个“iOS 流布局教学代码”,开发者不仅可以掌握UICollectionView的基本用法,还能了解到如何根据实际需求定制流布局,...
在iOS开发中,使用XIB(Interface Builder)创建自定义键盘是一种常见的实践,这使得开发者可以灵活地设计和控制键盘的外观与行为。本压缩包"ios-使用xib做的键盘.zip"包含了一个名为"什么鬼东西呀Demo"的项目,它...
本资源"ios-自定义xib购物车.zip"提供了一个可自定义的购物车组件,这对于我们理解如何在iOS应用中创建、自定义和管理购物车视图具有很高的学习价值。 购物车组件是电商应用的核心部分,通常包含商品列表、数量选择...