博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【原】iOS:一种直接修改frame的某个属性的方法
阅读量:5953 次
发布时间:2019-06-19

本文共 2645 字,大约阅读时间需要 8 分钟。

在iOS中view的frame属性使用地太频繁了,尤其是调UI的时候。我们知道,正常情况下我们无法对frame的某个属性(x,y,width,height等)进行单独修改,比如:

1
someView.frame.x = 100;

这种方式是不允许的,但实际上我们更经常遇到的是frame的大部分元素值保持不变,只改变其中的一部分。相信这个烦恼困扰了不少人,于是我们不得不用以下两种方法去达到目的:

1
2
3
4
5
6
7
8
法1:
CGRect frame = someView.frame;
frame.x =100;
frame.width = 200;
someView.frame = frame;
 
法2:
someView.frame = CGRectMake(100, XXX, 200, XXX);

法2看起来也很精简,但实际上也很麻烦,因为实际应用场景中x, y, width, height四个值都是依赖别的变量,导致法2的语句非常长。简而言之,以上方法都不够“优雅”。那怎样才算优雅呢?我觉得如果我们能如下这样直接修改某个值就完美了:

1
2
someView.x = 100;
someView.width = 200;

我们跳过someView的frame属性,直接修改了我们想要的元素值。幸运的是,我们使用category可以相当方便地达到目的,这是一件一劳永逸的事情,引入一次category后整个工程都可以使用这种修改方法:

1 // 2 //  UIView+Frame.h 3 //  WZLCodeLibrary 4 // 5 //  Created by wzl on 15/3/23. 6 //  Copyright (c) 2015年 Weng-Zilin. All rights reserved. 7 // 8  9 #import 
10 11 @interface UIView (Frame)12 13 @property (nonatomic, assign) CGFloat x;14 @property (nonatomic, assign) CGFloat y;15 @property (nonatomic, assign) CGFloat width;16 @property (nonatomic, assign) CGFloat height;17 @property (nonatomic, assign) CGPoint origin;18 @property (nonatomic, assign) CGSize size;19 20 @end

 

1 // 2 //  UIView+Frame.m 3 //  WZLCodeLibrary 4 // 5 //  Created by wzl on 15/3/23. 6 //  Copyright (c) 2015年 Weng-Zilin. All rights reserved. 7 // 8  9 #import "UIView+Frame.h"10 11 @implementation UIView (Frame)12 13 - (void)setX:(CGFloat)x14 {15     CGRect frame = self.frame;16     frame.origin.x = x;17     self.frame = frame;18 }19 20 - (CGFloat)x21 {22     return self.frame.origin.x;23 }24 25 - (void)setY:(CGFloat)y26 {27     CGRect frame = self.frame;28     frame.origin.y = y;29     self.frame = frame;30 }31 32 - (CGFloat)y33 {34     return self.frame.origin.y;35 }36 37 - (void)setOrigin:(CGPoint)origin38 {39     CGRect frame = self.frame;40     frame.origin = origin;41     self.frame = frame;42 }43 44 - (CGPoint)origin45 {46     return self.frame.origin;47 }48 49 - (void)setWidth:(CGFloat)width50 {51     CGRect frame = self.frame;52     frame.size.width = width;53     self.frame = frame;54 }55 56 - (CGFloat)width57 {58     return self.frame.size.width;59 }60 61 - (void)setHeight:(CGFloat)height62 {63     CGRect frame = self.frame;64     frame.size.height = height;65     self.frame = frame;66 }67 68 - (CGFloat)height69 {70     return self.frame.size.height;71 }72 73 - (void)setSize:(CGSize)size74 {75     CGRect frame = self.frame;76     frame.size = size;77     self.frame = frame;78 }79 80 - (CGSize)size81 {82     return self.frame.size;83 }84 85 86 @end

 

这种策略虽然简单,说破了就不值钱了,但是实用!希望这篇文章能帮大家打破思维定势,不要再被frame困扰!

本文转自编程小翁博客园博客,原文链接:http://www.cnblogs.com/wengzilin/p/4359865.html,如需转载请自行联系原作者

你可能感兴趣的文章
Linux substring & if
查看>>
Yii 关于AR分表
查看>>
Java中的一些基本转换
查看>>
如何把文档扫描保存到Google Drive中
查看>>
Android初始化语言 (init.*.rc、init.conf文件格式)
查看>>
取消IDEA保存文件,默认删除行尾空格
查看>>
JSTL获取session中的值
查看>>
iOS WKWebView和JS交互的两种方式
查看>>
十个Android Material Design库
查看>>
[Elasticsearch] 多字段搜索 (一) - 多个及单个查询字符串
查看>>
问题8:NavigationController 自定义返回按钮I
查看>>
百度编辑器UEditor源码模式下过滤div/style等html标签
查看>>
类似新浪微博和google图片的HTML5实现图片拖拽上传功能
查看>>
在linux里flash自动转图片
查看>>
[总结]-第七章 虚拟机类加载机制
查看>>
【No.1】基于Cookie的单点登录(SSO)
查看>>
主流视频客户端核心代码的实现
查看>>
命令行进度条
查看>>
Error(1.0.5 1107071739): D:\SAE_SDK_Windows_1.0...
查看>>
转:Ruby 的性能 与如何选用正确的framework来做web
查看>>