部分代码如下:
//设置控件frame时,先设置尺寸width,height,再设置中心,centerX,centerY
- (CGFloat)sth_right{
return self.sth_x+ self.sth_width;
}
- (void)setSth_right:(CGFloat)sth_right{
self.sth_x = sth_right - self.sth_width;
}
- (CGFloat)sth_bottom{
return self.sth_y+ self.sth_height;
}
- (void)setSth_bottom:(CGFloat)sth_bottom{
self.sth_y = sth_bottom - self.sth_height;
}
实例分析:
1.注意一般设置子view位置时,一般使用width或height,及x,y,最好不要使用centerX或Y一般说来不太准确。
2.分类设置子view位置时一定要重写layoutSubViews方法,并先调用父类方法
//view分类
#import <UIKit/UIKit.h>
@interface UIView (STHViewFrame)
@property (nonatomic, assign) CGFloat sth_x;
@property (nonatomic, assign) CGFloat sth_y;
@property (nonatomic, assign) CGFloat sth_w;
@property (nonatomic, assign) CGFloat sth_h;
@property (nonatomic, assign) CGFloat sth_centerX;
@property (nonatomic, assign) CGFloat sth_centerY;
@property (nonatomic, assign) CGFloat sth_right;
@property (nonatomic, assign) CGFloat sth_bottom;
@end
#import "UIView+STHViewFrame.h"
@implementation UIView (STHViewFrame)
- (CGFloat)sth_x{
return self.center.x;
}
- (void)setSth_x:(CGFloat)sth_x{
CGRect frame = self.frame;
frame.origin.x = sth_x;
self.frame = frame;
}
- (CGFloat)sth_y{
return self.center.y;
}
- (void)setSth_y:(CGFloat)sth_y{
CGRect frame = self.frame;
frame.origin.y = sth_y;
self.frame = frame;
}
- (CGFloat)sth_w{
return self.frame.size.width;
}
- (void)setSth_w:(CGFloat)sth_w{
CGRect frame = self.frame;
frame.size.width = sth_w;
self.frame = frame;
}
- (CGFloat)sth_h{
return self.frame.size.height;
}
- (void)setSth_h:(CGFloat)sth_h{
CGRect frame = self.frame;
frame.size.height = sth_h;
self.frame = frame;
}
- (CGFloat)sth_centerX{
return self.center.x;
}
- (void)setSth_centerX:(CGFloat)sth_centerX{
CGPoint center = self.center;
center.x = sth_centerX;
self.center = center;
}
- (CGFloat)sth_centerY{
return self.center.y;
}
- (void)setSth_centerY:(CGFloat)sth_centerY{
CGPoint center = self.center;
center.y = sth_centerY;
self.center = center;
}
- (CGFloat)sth_right{
return self.sth_x + self.sth_w;
}
- (void)setSth_right:(CGFloat)sth_right{
self.sth_x = sth_right - self.sth_w;
}
- (CGFloat)sth_bottom{
return self.sth_y + self.sth_h;
}
- (void)setSth_bottom:(CGFloat)sth_bottom{
self.sth_y = sth_bottom - self.sth_h;
}
@end
//自定义按钮及布局
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end
@interface customButton : UIButton
@end
#import "ViewController.h"
#import "UIView+STHViewFrame.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSArray *images = @[@"mine_icon_nearby",@"mine_icon_random",@"mine-icon-activity"];
NSArray *titles = @[@"位置",@"我的",@"他的"];
for (NSInteger i = 0; i < images.count; i++) {
customButton *button = [[customButton alloc] initWithFrame:CGRectMake(20+i*110, 200, 100, 100)];
[button setImage:[UIImage imageNamed:images[i]] forState:UIControlStateNormal];
[button setTitle:titles[i] forState:UIControlStateNormal];
[button setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[button setBackgroundColor:[UIColor yellowColor]];
[button.titleLabel setTextAlignment:NSTextAlignmentCenter];
[self.view addSubview:button];
}
}
@end
@implementation customButton
- (void)layoutSubviews{
[super layoutSubviews];
NSLog(@"%f%f--%f%f",self.sth_centerY,self.sth_centerX,self.sth_h,self.sth_w);
self.imageView.sth_centerX = self.sth_w/2;
self.imageView.sth_y = self.sth_h/2 - 5 - self.imageView.image.size.height/2;
self.imageView.sth_w = self.imageView.image.size.width;
self.imageView.sth_h = self.imageView.image.size.height;
self.titleLabel.sth_y = CGRectGetMaxY(self.imageView.frame)+5;
self.titleLabel.sth_x = 0;
self.titleLabel.sth_h = 17;
self.titleLabel.sth_w = self.sth_w;
}
@end
效果图: