相信很多同学都知道在iOS7之后调整导航栏两侧按钮距离左右间距,其实就是在左右barButtonItem的数组中添加一个宽度为负的占位item。 - (void)addLeftBarButtonItem:(UIBarButtonItem *)leftBarButtonItem { UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace t
实现思路: 1.输入显示试图和系统键盘的出现和隐藏。 2.用UILabel和UITextField实现输入框。
额,标题很长,但不得不这样写。 很多人可能碰到和我一样的疑惑,我明明把某个objectView直接removeFromSuperview了,为什么我下面判断if(objectView){}这个分支仍然能进去呢?我不是已经删除了吗? 实际上,你可能和我一样,没有理解这个removeFromSuperview到底是什么意思,先来说说这个属性的意思: 官方文档这样描述它 Unlinks the receiver from its superview and its window, and removes i
IBAction和IBOutlet IBAction:只有返回值声明为IBAction的方法,才能跟storyboard中的控件进行连线 @property (weak, nonatomic) IBOutlet UIButton *btn; IBOutlet:只有声明为IBOutlet的属性,才能跟storyboard中的控件进行连线 -(IBAction)delete1{//移除控件[self.myTitle removeFromSuperview];} ---- 拖线的其他方式 一个对象能连接多个方法
常用九宫格定义的宏如下: /**************************无间距****************************/ /** 设置格子的X坐标 * SUPERVIEW 指九宫格每个小格子的父视图 * WIDTH 指九宫格每个小格子的宽度 int width = (SCREEN_WIDTH - (colunm - 1) * margin) / colunm; * COLUMN 指九宫格的纵向列数 * 注意: MARGIN 和 WIDTH 不能都是 CGFlo
由于View对象是应用程序与用户交互的主要方式,因此它们有许多责任。 这里仅仅是少数:
前段时间闲着无聊和盆友就搞了个图床站Chevereto-Free,忽然发现居然有API提供,而且很简单,只需要一个KEY就可以
简介 简化iOS应用使用纯代码机型自适应布局的工作,使用一种简洁高效的语法替代NSLayoutConstraints. 最新示例: 点击下载 项目简议: 如果再看到关于纯代码,xib或storyboa
iOS的组件都是封装好的,又没法看源代码,所以我们不容易知道组件的结构,所以我们可以遍历所有的视图,打印出来,来查看结构
AutoLayout是一种基于约束的,描述性的布局系统。 item1.attribute1 = multiplier * item2.attribute2 + constant + (id)constraintWithItem:(id)item1 attribute:(NSLayoutAttribute)attribute1 relatedBy:(NsLayoutRelation)relation
1、创建UINavigationItem Category @implementation UINavigationItem (SXFixSpace) +(void)load { [self swizzleMethod:@selector(setLeftBarButtonItem:) swizzledSelector:@selector(sx_setLeftBarButtonItem:)]; [self swizzleMet
在iOS中,您可以使用windows和views在屏幕上显示应用程序的内容。 Windows本身没有任何可见的内容,但为应用程序的views提供了一个基本的容器。 views定义了您想要填充某些内容的windows的一部分。 例如,您可能具有显示图像,文本,形状或其组合的views。 您还可以使用views来组织和管理其他views。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/80521257
Autoresizing是苹果早期屏幕适配的解决办法,当时iOS设备机型很少、屏幕尺寸单一、APP界面相对简单,屏幕适配并没有现在这么复杂,所有的UI控件只要相对父控件布局就可以了,Autoresizing就是一个相对于父控件的布局解决方法
iOS绘制九宫格的方式至少有两种。一种是利用UIKit框架提供的UICollectionView直接定制一个九宫格。另一种方式是根据行高、列宽动态计算每个格子的位置,后者这种纯计算的方式我们写一次就够了。今天我带给大家两个我写好的宏,以后制作九宫格,我们直接用这个宏即可! /** 设置格子的X坐标 * SUPERVIEW 指九宫格每个小格子的父视图 * WIDTH 指九宫格每个小格子的宽度 int width = (VVS_SCREEN_WIDTH - (colunm + 1) * margin
在上一篇博客中介绍了传统的布局方式:autoresizing。随着iphone型号的越来越多,屏幕的标准也更加多样化,通过autoresizing已经不能满足开发的需求,而进行两套布局或者动态代码控制又大大增加了开发者的工作量,autolayout的出现拯救个这一切,它让动态布局变的十分简单便捷。
例如:我们需要布局一个视图view1,使他距离父视图上下左右都为10,NSLayoutConstraints布局代码如下:
今天升级最新IDE Xcode,准备适配iOS14 API,结果发现app首页的cell中按钮也无法点击了。
先说需求:在tableView中每一行有一个删除按钮,点击删除当前行。(很多项目都会用到吧) 写一段废话:写例子的时候一直想找一个大家常用的功能做,但当这个例子写完我又犹豫要不要传上来,原因是对于这个功能,其实有其他更好的方法解决,其中我代码中的(方法一)就是其中一个不错的解决方案。可是如果你细心会发现,runtime有个很大的好处就是你不需要再费劲找目标对象了。只需要 1 绑定。2 取出。用法简单又霸道... 代码: #import "ViewController.h" #import "SGMy
iOS中的事件大概分为三种,分别是Milti-Touch Events, Motion Events和Remote Control Events(events for controlling multimedia)。
到这里相关的说明已罗列完毕,有什么不清楚的可以下载Demo看看,或者在文章下方留言提问
addSubview: Adds a view to the end of the receiver’s list of subviews. 译:增加一个视图到接收者的子视图列表中。 - (void)addSubview:(UIView *)view Parameters view The view to be added. This view is retained by the receiver. After being added, this view appears on top of any ot
A view (an object whose class is UIView or a subclass of UIView) knows how to draw itself into a rectangular area of the interface.
本文主要介绍了一种基于Masonry的视图模块化方案,通过使用自定义UIView和UICollectionView实现视图的模块化,简化了视图的创建过程,提高了开发效率。同时,还介绍了一种基于Masonry的自动计算视图间距的方法,简化了间距调整的实现过程。
iPhone自诞生以来,随着其屏幕尺寸不断的多样化,屏幕适配的技术一直在发展更新。目前,iOS系统版本已经更新到9.3,XCode的最新版本已经是7.3,仅iPhone历史产品的尺寸就已经有4种:3.5英寸、4.0英寸、4.7英寸、5.5英寸。最近,iPhone家族又诞生一款iPhoneSE,鉴于这款iPhoneSE的屏幕尺寸和iPhone5S的尺寸一模一样——同样是4.0英寸,广大iOS开发者可算是松了口气,不然iOS的屏幕尺寸真的是越来越让人眼花缭乱。 按照时间顺序,屏幕适配是这样发展的:纯代码计算frame-> autoresizing(早期进行UI布局的技术,仅适用于约束父子控件之间的关系)->AutoLayout(iOS6/2012年、iPhone5被引入,比autoresizing更加高级,旨在替代autoresizing,可以设置任何控件之间的关系)->sizeClass(iOS8出现,用于解决越来越多的屏幕尺寸的适配问题)。 在iPhone3gs时代,手机的屏幕尺寸有且只有一种,也就是3.5英寸。开发app的时候,根本不用考虑同一个视图在不同尺寸的屏幕上显示的问题。iOS开发者完全可以用纯代码的方式把一个控件的frame写死。 后来apple公司推出了4.0英寸的iPhone5和iPhone5S,所以,针对于不同尺寸的屏幕,再把控件的frame写死就不可取了。(其实也不是不可取,很多iOS开发者做屏幕适配的时候不是用的autoresizing或autolayout,而是以代码的方式动态获取屏幕的尺寸,然后根据屏幕的尺寸来写死子控件的frame。使用这种方式你会在代码中无辜增加很多if...else... 的条件判断语句。另一种方式是获取到屏幕的尺寸后,按照控件和屏幕的比例来设置控件的frame,其本质上也是写死frame。所以这两种方式都不可取,毕竟将来会回出现越来越多的屏幕尺寸。从开发的角度,重复繁琐的代码会牵绊住开发者的进度;从程序设计角度,这样的设计思路不够高级,且日后不易于拓展和维护。)
其实只需要在mas_updateConstraints:设置完需要更新的layout之后调用父视图的layoutIfNeeded方法就行。
image.png 前言: 师弟要毕业设计,就敲了swift版的计算器给他参考下。现在把代码放上来,通过这个计算器,可以学习简单的封装:将逻辑与界面分离并提供接口的编程方式,这也是我们学习面向对象的必要点。 基于 xcode 9.0 swift4.0 一、先引用SnapKit框架 SnapKit自己看git引入 利用其来约束组件 二、新建一个继承UIButton类的类文件,命名为DWFuncButton,对其设置字体、颜色、风格代码如下: class DWFuncButton: UIButton {
关于iOS的布局主要有两种方式,分别是AutoResizing和AutoLayout。其中AutoResizing作为一种旧的布局方式,在AutoLayout被推广之后已经很少被使用。为了更加清晰的了解iOS的布局方式,本篇针对于这两种布局方法进行简要的总结。 一.AutoResizing 我们在使用AutoResizing进行布局的时候,其主要思想就是设置子视图跟随父视图的frame变化而变化。具体的情况,我们可以设置左跟随,右跟随等等。下面是AutoResizing在代码中的使用。 //父视图 UIVi
一、继承自UITextfield自定义一个SSTouchTextField 代码如下: #import "SSTouchTextField.h" @implementation SSTouchTextField #pragma mark - Private - (void)setBackgroundHighlighted:(BOOL)highlighted{ [UIView animateWithDuration:0.3f delay:0.f options:UIViewAnimationOp
全局函数 Global functions :无需特定类型范围就可以从任何地方访问的函数是一个古老的概念,在 C 和 Objective-C 等语言中很流行,但是在 Swift 中不建议使用,因为我们希望对它们进行很好的类型化和范围划分("swifty")。
利用 Mansory / SnapKit 调整按钮的图片位置,分别显示在上下左右:
LaunchScreen.storyboard 界面 : 该界面不是用于展示应用程序的界面 ;
原因:往cell添加子视图的方式不规范,导致contentView 置于自定义控件的上层,引发界面无响应(注意处理相关方法)
根据标识来识别每一个事件, 针对指定的事件进行取参埋点。而事件的标识与参数信息都写在配置表中,通过动态下发配置表来实现埋点统计。
1. 起因 我们经常能够在第三方库的源码中看到很多loadView、willMoveToParentViewController:、viewDidLayoutSubviews 等等诸如此类的并不是十分常见的方法。这让永远都只在viewDidLoad写作的童鞋们情何以堪吶。 这些其实都和生命周期有关,和viewController以及view的各种加载顺序有关。这篇文章就小小撸一下这中间的关系和顺序。 2. Controller的生命周期 系统提供了控制器从显示到消失的四个方法。 千万不要看到方法名中间出现了
Masonry是iOS在控件布局中经常使用的一个轻量级框架,Masonry让NSLayoutConstraint使用起来更为简洁。Masonry简化了NSLayoutConstraint的使用方式,让我们可以以链式的方式为我们的控件指定约束。本篇博客的主题不是教你如何去使用Masonry框架的,而是对Masonry框架的源码进行解析,让你明白Masonry是如何对NSLayoutConstraint进行封装的,以及Masonry框架中的各个部分所扮演的角色是什么样的。在Masonry框架中,仔细的品味干货还
blurView.backgroundColor= [UIColorcolorWithRed:0green:0blue:0alpha:0.3];
一般情况都是说UIViewController的生命周期,UIView的生命周期经常被忽视。
3.times { puts 'hello world' } 这是一条Ruby语句,它会打印“hello world”三次,意图清晰,语法简洁。
前言 UI布局是整个前端体系里不可或缺的一环。代码的布局是设计语言与用户视觉感受沟通的桥梁,不论它看起来多么简单或是琐碎,但不得不承认,绝大部分软件开发的问题,都是界面问题。那么,如何高效的完成UI开
bounds是指这个view在它自己坐标系的坐标和大小 而frame指的是这个view在它superview的坐标系的坐标和大小区别主要在坐标系这一块。很明显一个是自己为原点的坐标系,一个是以屏幕为原点的坐标系。
UI布局是整个前端体系里不可或缺的一环。代码的布局是设计语言与用户视觉感受沟通的桥梁,不论它看起来多么简单或是琐碎,但不得不承认,绝大部分软件开发的问题,都是界面问题。那么,如何高效的完成UI开发,也是软件行业一直在克服的问题。
现在在开发 IOS 应用时,默认是保证可以同时在 iphone 和 ipad 上运行的。不过,这就会面临一些多屏适配性问题。
在iOS开发中,我们知道有一个共同的基类——NSObject,但是对于界面视图而言,UIView是非常重要的一个类,UIView是很多视图控件的基类,因此,对于UIView的学习闲的非常有必要。在iO
前言: 一个人有多不正经,就有多深情。一个程序员有多闷,就代表ta有多骚。 我不等山无棱,不等夏雨雪,不等天地合。因为即使江水为竭,即使冬雷震震,我都在你一个转身就能触碰的距离。 (纯小白教程。七夕福利哦~) 一、绘制蓝色海洋背景 从动图中可以看出这片背景呈渐变色,自然我们可以想到用CAGradientLayer类来创建渐变图层。这块代码值得一提的地方在于设置颜色,CAGradientLayer的colors属性是一个数组,里面可以用于存放不同的颜色。在本案例中,采用的是C语言库的颜色,因此需要
在使用view的缩放的时候,layer.border.width随着view的放大,会出现锯齿化的问题,解决这个问题需要设置这个属性。
一、前言 我们在写列表的时候,经常出现每一个 Cell 高度不一样的情况,但是 iOS 这边是在是太不智能了 比起隔壁 android 的 RecyclerView ,人家可以自动更具每一项高度,来进行伸缩变化,iOS 的列表控件 UITableView 竟然都不能直接自适应列表高度 二、效果 其实具体的实现并不难,只是没学过的人肯定搞不出来,开始前这里可以先看下效果 大致就是 UITableView 会自动计算每一个 cell 的高度,伸缩变换后显示出来,网上有很多类似的帖子,但是大都纸上谈兵,没图没代码
代码地址: https://github.com/RainManGO/PanView
领取专属 10元无门槛券
手把手带您无忧上云