iOS: Input align to android implement
This commit is contained in:
parent
58067e217e
commit
abc39ed28f
@ -32,7 +32,6 @@
|
|||||||
typedef void (^onSubmitEditingBlock)(NSString *text, DoricInputNode *node);
|
typedef void (^onSubmitEditingBlock)(NSString *text, DoricInputNode *node);
|
||||||
|
|
||||||
@interface DoricSingleLineInput : UITextField
|
@interface DoricSingleLineInput : UITextField
|
||||||
@property(nonatomic, assign) DoricGravity gravity;
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation DoricSingleLineInput
|
@implementation DoricSingleLineInput
|
||||||
@ -43,26 +42,6 @@ - (void)drawTextInRect:(CGRect)rect {
|
|||||||
- (CGSize)sizeThatFits:(CGSize)size {
|
- (CGSize)sizeThatFits:(CGSize)size {
|
||||||
return [super sizeThatFits:size];
|
return [super sizeThatFits:size];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (CGRect)textRectForBounds:(CGRect)bounds {
|
|
||||||
return UIEdgeInsetsInsetRect(
|
|
||||||
bounds,
|
|
||||||
UIEdgeInsetsMake(
|
|
||||||
self.superview.doricLayout.paddingTop,
|
|
||||||
self.superview.doricLayout.paddingLeft,
|
|
||||||
self.superview.doricLayout.paddingBottom,
|
|
||||||
self.superview.doricLayout.paddingRight));
|
|
||||||
}
|
|
||||||
|
|
||||||
- (CGRect)editingRectForBounds:(CGRect)bounds {
|
|
||||||
return UIEdgeInsetsInsetRect(
|
|
||||||
bounds,
|
|
||||||
UIEdgeInsetsMake(
|
|
||||||
self.superview.doricLayout.paddingTop,
|
|
||||||
self.superview.doricLayout.paddingLeft,
|
|
||||||
self.superview.doricLayout.paddingBottom,
|
|
||||||
self.superview.doricLayout.paddingRight));
|
|
||||||
}
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface DoricMultilineInput : UITextView
|
@interface DoricMultilineInput : UITextView
|
||||||
@ -87,26 +66,46 @@ - (instancetype)init {
|
|||||||
- (void)layoutSubviews {
|
- (void)layoutSubviews {
|
||||||
[super layoutSubviews];
|
[super layoutSubviews];
|
||||||
self.placeholderLabel.hidden = self.text.length > 0;
|
self.placeholderLabel.hidden = self.text.length > 0;
|
||||||
if (self.placeholderLabel.hidden) {
|
if (!self.placeholderLabel.hidden) {
|
||||||
return;
|
CGFloat lineFragmentPadding = self.textContainer.lineFragmentPadding;
|
||||||
}
|
UIEdgeInsets textContainerInset = self.textContainerInset;
|
||||||
CGFloat lineFragmentPadding = self.textContainer.lineFragmentPadding;
|
self.placeholderLabel.x = lineFragmentPadding + textContainerInset.left;
|
||||||
UIEdgeInsets textContainerInset = self.textContainerInset;
|
|
||||||
self.placeholderLabel.x = lineFragmentPadding + textContainerInset.left;
|
|
||||||
|
|
||||||
CGFloat desiredWidth = self.width - lineFragmentPadding * 2 - textContainerInset.left - textContainerInset.right;
|
CGFloat desiredWidth = self.width - lineFragmentPadding * 2 - textContainerInset.left - textContainerInset.right;
|
||||||
CGSize fitSize = [self.placeholderLabel sizeThatFits:CGSizeMake(desiredWidth, 0)];
|
CGSize fitSize = [self.placeholderLabel sizeThatFits:CGSizeMake(desiredWidth, 0)];
|
||||||
|
|
||||||
if (fitSize.width < desiredWidth) {
|
if (fitSize.width < desiredWidth) {
|
||||||
self.placeholderLabel.width = desiredWidth;
|
self.placeholderLabel.width = desiredWidth;
|
||||||
|
}
|
||||||
|
self.placeholderLabel.height = fitSize.height;
|
||||||
|
if ((self.gravity & DoricGravityTop) == DoricGravityTop) {
|
||||||
|
self.placeholderLabel.y = textContainerInset.top;
|
||||||
|
} else if ((self.gravity & DoricGravityBottom) == DoricGravityBottom) {
|
||||||
|
self.placeholderLabel.y = self.height - textContainerInset.bottom - fitSize.height;
|
||||||
|
} else {
|
||||||
|
self.placeholderLabel.centerY = (self.height - textContainerInset.top - textContainerInset.bottom) / 2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
self.placeholderLabel.height = fitSize.height;
|
if (self.contentSize.height < self.height) {
|
||||||
if ((self.gravity & DoricGravityTop) == DoricGravityTop) {
|
if ((self.gravity & DoricGravityTop) == DoricGravityTop) {
|
||||||
self.placeholderLabel.y = textContainerInset.top;
|
self.contentInset = UIEdgeInsetsMake(
|
||||||
} else if ((self.gravity & DoricGravityBottom) == DoricGravityBottom) {
|
0,
|
||||||
self.placeholderLabel.y = self.height - textContainerInset.bottom - fitSize.height;
|
self.contentInset.left,
|
||||||
} else {
|
self.contentInset.bottom,
|
||||||
self.placeholderLabel.centerY = (self.height - textContainerInset.top - textContainerInset.bottom) / 2;
|
self.contentInset.right);
|
||||||
|
} else if ((self.gravity & DoricGravityBottom) == DoricGravityBottom) {
|
||||||
|
self.contentInset = UIEdgeInsetsMake(
|
||||||
|
self.height - self.contentSize.height,
|
||||||
|
self.contentInset.left,
|
||||||
|
self.contentInset.bottom,
|
||||||
|
self.contentInset.right);
|
||||||
|
} else {
|
||||||
|
self.contentInset = UIEdgeInsetsMake(
|
||||||
|
(self.height - self.contentSize.height) / 2,
|
||||||
|
self.contentInset.left,
|
||||||
|
self.contentInset.bottom,
|
||||||
|
self.contentInset.right);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,9 +136,13 @@ - (instancetype)init {
|
|||||||
if (self = [super init]) {
|
if (self = [super init]) {
|
||||||
_multiLineInput = [DoricMultilineInput new];
|
_multiLineInput = [DoricMultilineInput new];
|
||||||
_multiLineInput.backgroundColor = UIColor.clearColor;
|
_multiLineInput.backgroundColor = UIColor.clearColor;
|
||||||
|
_multiLineInput.textAlignment = NSTextAlignmentLeft;
|
||||||
|
_multiLineInput.gravity = DoricGravityTop;
|
||||||
[self addSubview:_multiLineInput];
|
[self addSubview:_multiLineInput];
|
||||||
_singleLineInput = [DoricSingleLineInput new];
|
_singleLineInput = [DoricSingleLineInput new];
|
||||||
_singleLineInput.backgroundColor = UIColor.clearColor;
|
_singleLineInput.backgroundColor = UIColor.clearColor;
|
||||||
|
_singleLineInput.textAlignment = NSTextAlignmentLeft;
|
||||||
|
_singleLineInput.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;
|
||||||
[self addSubview:_singleLineInput];
|
[self addSubview:_singleLineInput];
|
||||||
self.multiline = YES;
|
self.multiline = YES;
|
||||||
}
|
}
|
||||||
@ -160,8 +163,14 @@ - (BOOL)multiline {
|
|||||||
|
|
||||||
- (void)setFrame:(CGRect)frame {
|
- (void)setFrame:(CGRect)frame {
|
||||||
[super setFrame:frame];
|
[super setFrame:frame];
|
||||||
self.singleLineInput.frame = frame;
|
self.singleLineInput.width = frame.size.width - self.doricLayout.paddingLeft - self.doricLayout.paddingRight;
|
||||||
self.multiLineInput.frame = frame;
|
self.singleLineInput.height = frame.size.height - self.doricLayout.paddingTop - self.doricLayout.paddingBottom;
|
||||||
|
self.singleLineInput.x = self.doricLayout.paddingLeft;
|
||||||
|
self.singleLineInput.y = self.doricLayout.paddingTop;
|
||||||
|
self.multiLineInput.width = frame.size.width - self.doricLayout.paddingLeft - self.doricLayout.paddingRight;
|
||||||
|
self.multiLineInput.height = frame.size.height - self.doricLayout.paddingTop - self.doricLayout.paddingBottom;
|
||||||
|
self.multiLineInput.x = self.doricLayout.paddingLeft;
|
||||||
|
self.multiLineInput.y = self.doricLayout.paddingTop;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (CGSize)sizeThatFits:(CGSize)size {
|
- (CGSize)sizeThatFits:(CGSize)size {
|
||||||
@ -307,6 +316,7 @@ - (DoricInputView *)build {
|
|||||||
v.doricLayout.paddingBottom = v.multiLineInput.textContainerInset.bottom;
|
v.doricLayout.paddingBottom = v.multiLineInput.textContainerInset.bottom;
|
||||||
v.doricLayout.paddingLeft = v.multiLineInput.textContainerInset.left;
|
v.doricLayout.paddingLeft = v.multiLineInput.textContainerInset.left;
|
||||||
v.doricLayout.paddingRight = v.multiLineInput.textContainerInset.right;
|
v.doricLayout.paddingRight = v.multiLineInput.textContainerInset.right;
|
||||||
|
v.multiLineInput.textContainerInset = UIEdgeInsetsMake(0, 0, 0, 0);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -332,7 +342,6 @@ - (void)blendView:(DoricInputView *)view forPropName:(NSString *)name propValue:
|
|||||||
}
|
}
|
||||||
view.textAlignment = alignment;
|
view.textAlignment = alignment;
|
||||||
view.multiLineInput.gravity = gravity;
|
view.multiLineInput.gravity = gravity;
|
||||||
view.singleLineInput.gravity = gravity;
|
|
||||||
UIControlContentVerticalAlignment verticalAlignment = UIControlContentVerticalAlignmentCenter;
|
UIControlContentVerticalAlignment verticalAlignment = UIControlContentVerticalAlignmentCenter;
|
||||||
if ((gravity & DoricGravityTop) == DoricGravityTop) {
|
if ((gravity & DoricGravityTop) == DoricGravityTop) {
|
||||||
verticalAlignment = UIControlContentVerticalAlignmentTop;
|
verticalAlignment = UIControlContentVerticalAlignmentTop;
|
||||||
@ -451,13 +460,6 @@ - (void)blend:(NSDictionary *)props {
|
|||||||
- (void)afterBlended:(NSDictionary *)props {
|
- (void)afterBlended:(NSDictionary *)props {
|
||||||
[super afterBlended:props];
|
[super afterBlended:props];
|
||||||
if (self.view.multiline) {
|
if (self.view.multiline) {
|
||||||
if (self.view.doricLayout.paddingTop != self.view.multiLineInput.textContainerInset.top
|
|
||||||
|| self.view.doricLayout.paddingLeft != self.view.multiLineInput.textContainerInset.left
|
|
||||||
|| self.view.doricLayout.paddingBottom != self.view.multiLineInput.textContainerInset.bottom
|
|
||||||
|| self.view.doricLayout.paddingRight != self.view.multiLineInput.textContainerInset.right) {
|
|
||||||
self.view.multiLineInput.textContainerInset = UIEdgeInsetsMake(self.view.doricLayout.paddingTop, self.view.doricLayout.paddingLeft, self.view.doricLayout.paddingBottom, self.view.doricLayout.paddingRight);
|
|
||||||
}
|
|
||||||
|
|
||||||
UIFont *font = self.view.multiLineInput.placeholderLabel.font;
|
UIFont *font = self.view.multiLineInput.placeholderLabel.font;
|
||||||
if (font) {
|
if (font) {
|
||||||
self.view.multiLineInput.placeholderLabel.font = [self.view.multiLineInput.placeholderLabel.font fontWithSize:self.view.font.pointSize];
|
self.view.multiLineInput.placeholderLabel.font = [self.view.multiLineInput.placeholderLabel.font fontWithSize:self.view.font.pointSize];
|
||||||
|
Reference in New Issue
Block a user