博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
判断视图是否相交
阅读量:4296 次
发布时间:2019-05-27

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

判断视图是否相交以及是否被键盘遮盖

@interface UIView (Util)///返回视图是否相交,若相交,offset 的值表示避免相交需要的位移- (BOOL)isCoveredByView:(UIView *)view offset:(CGFloat *)offset;///返回视图是否被键盘遮盖,若是,offset 的值表示视图要避免遮盖的位移量- (BOOL)isCoveredByBoard:(CGRect)keyboardRect offset:(CGFloat *)offset;@end
@implementation UIView (Util)#pragma mark 判断当前视图是否被其他视图遮盖- (BOOL)isCoveredByView:(UIView *)view offset:(CGFloat *)offset {    if (!self || !view) {        return NO;    }    if (![self superview]) {        return NO;    }    if (self.hidden || view.hidden) {        return NO;    }    UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];    CGRect viewRect;    if([view isKindOfClass:[UIWindow class]]){        viewRect = [(UIWindow*)view convertRect:view.frame toWindow:keyWindow];    }else {        viewRect = [view.superview convertRect:view.frame toView:keyWindow];    }    CGRect rect = [self.superview convertRect:self.frame toView:keyWindow];    if (CGRectIsEmpty(rect) || CGRectIsNull(rect) || CGSizeEqualToSize(rect.size, CGSizeZero)) {        return NO;    }    CGFloat heightOfCovered = viewRect.origin.y - rect.origin.y - rect.size.height;    heightOfCovered = heightOfCovered > -viewRect.size.height ? heightOfCovered : -viewRect.size.height;    *offset = heightOfCovered;    return CGRectIntersectsRect(rect, viewRect);}#pragma mark 判断当前视图是否被键盘遮盖- (BOOL)isCoveredByBoard:(CGRect)keyboardRect offset:(CGFloat *)offset {    if (!self) {        return NO;    }    if (![self superview]) {        return NO;    }    if (self.hidden) {        return NO;    }    UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];    NSArray *windows = [[UIApplication sharedApplication] windows];    UIWindow *keyboardWindow;    for (id window in windows) {        NSString *keyboardWindowString = NSStringFromClass([window class]);        if ([keyboardWindowString isEqualToString:@"UITextEffectsWindow"]) {            keyboardWindow = window;            break;        }    }    if (keyboardWindow == nil) return NO;    keyboardRect = [keyboardWindow convertRect:keyboardRect toWindow:keyWindow];    CGRect rect = [self.superview convertRect:self.frame toView:keyWindow];    if (CGRectIsEmpty(rect) || CGRectIsNull(rect) || CGSizeEqualToSize(rect.size, CGSizeZero)) {        return NO;    }    CGFloat heightOfCovered = keyboardRect.origin.y - rect.origin.y - rect.size.height;    heightOfCovered = heightOfCovered > -keyboardRect.size.height ? heightOfCovered : -keyboardRect.size.height;    *offset = heightOfCovered;    return CGRectIntersectsRect(rect, keyboardRect);}@end
#pragma mark - 键盘显示- (void)keyboardWillShow:(NSNotification *)notification{    if ([self.textField isFirstResponder]) {        CGRect keyboardFrame = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];        CGFloat offset;        if ([self.textField isCoveredByBoard:keyboardFrame offset:&offset]){            CGRect rect = self.textField.frame;            rect.origin.y += offset;            self.textField.frame = rect;        }    }}

转载地址:http://kadws.baihongyu.com/

你可能感兴趣的文章
f:facet标签 的用法
查看>>
<h:panelgroup>相当于span元素
查看>>
java中append()的方法
查看>>
必学高级SQL语句
查看>>
经典SQL语句大全
查看>>
Eclipse快捷键 10个最有用的快捷键
查看>>
log日志记录是什么
查看>>
<rich:modelPanel>标签的使用
查看>>
<h:commandLink>和<h:inputLink>的区别
查看>>
<a4j:keeyAlive>的英文介绍
查看>>
关于list对象的转化问题
查看>>
VOPO对象介绍
查看>>
suse创建的虚拟机,修改ip地址
查看>>
linux的挂载的问题,重启后就挂载就没有了
查看>>
docker原始镜像启动容器并创建Apache服务器实现反向代理
查看>>
docker容器秒死的解决办法
查看>>
管理网&业务网的一些笔记
查看>>
openstack报错解决一
查看>>
openstack报错解决二
查看>>
linux source命令
查看>>