1>自定义cell内部控件的位置:
- (void)layoutSubviews
{
[super layoutSubviews]
// 调整子控件的frame
CGFloat imageX = 10
CGFloat imageY = 10
CGFloat imageH = self.height - 2 * imageY
CGFloat imageW = imageH * 200 / 112
self.imageView.frame = CGRectMake(imageX, imageY, imageW, imageH)
CGRect textF = self.textLabel.frame
textF.origin.x = CGRectGetMaxX(self.imageView.frame) + 10
self.textLabel.frame = textF
// self.textLabel.x = CGRectGetMaxX(self.imageView.frame) + 10
CGRect detailTextF = self.detailTextLabel.frame
detailTextF.origin.x = textF.origin.x
self.detailTextLabel.frame = detailTextF
// self.detailTextLabel.x = self.textLabel.x
CGFloat dividerH = 1
CGFloat dividerY = self.height - dividerH
CGFloat dividerW = self.width
self.divider.frame = CGRectMake(0, dividerY, dividerW, dividerH)
}
2>为UIView实现一个比较好的分类,self.textLabel.x = CGRectGetMaxX(self.imageView.frame) + 10这样的代码就不会报错了:
#import <UIKit/UIKit.h>
@interface UIView (Extension)
@property (nonatomic, assign) CGFloat x;
@property (nonatomic, assign) CGFloat y;
@property (nonatomic, assign) CGFloat width;
@property (nonatomic, assign) CGFloat height;
#import "UIView+Extension.h"
@implementation UIView (Extension)
- (void)setX:(CGFloat)x
{
CGRect frame = self.frame;
frame.origin.x = x;
self.frame = frame;
}
- (CGFloat)x
{
return self.frame.origin.x;
}
- (void)setY:(CGFloat)y
{
CGRect frame = self.frame;
frame.origin.y = y;
self.frame = frame;
}
- (CGFloat)y
{
return self.frame.origin.y;
}
- (void)setWidth:(CGFloat)width
{
CGRect frame = self.frame;
frame.size.width = width;
self.frame = frame;
}
- (CGFloat)width
{
return self.frame.size.width;
}
- (void)setHeight:(CGFloat)height
{
CGRect frame = self.frame;
frame.size.height = height;
self.frame = frame;
}
- (CGFloat)height
{
return self.frame.size.height;
}
@end
@end