It sort of glitches. Because it compares with 0 rather than with the visible area boundaries. I do not want to describe it in detail. Look at the diff and you will see that I'm right.
WEPopover/Popover/WEPopoverContainerView.m
@@ -190,12 +190,12 @@ permittedArrowDirections:(UIPopoverArrowDirection)permittedArrowDirections
theOffset = CGPointMake(anchorPoint.x - xArrowOffset - upArrowImage.size.width / 2, anchorPoint.y - yArrowOffset);
theBgRect = CGRectMake(0, 0, theSize.width, theSize.height);
- if (theOffset.x < 0) {
- xArrowOffset += theOffset.x;
- theOffset.x = 0;
- } else if (theOffset.x + theSize.width > displayArea.size.width) {
- xArrowOffset += (theOffset.x + theSize.width - displayArea.size.width);
- theOffset.x = displayArea.size.width - theSize.width;
+ if (theOffset.x < CGRectGetMinX(displayArea)) {
+ xArrowOffset += theOffset.x - CGRectGetMinX(displayArea);
+ theOffset.x = CGRectGetMinX(displayArea);
+ } else if (theOffset.x + theSize.width > CGRectGetMaxX(displayArea)) {
+ xArrowOffset += (theOffset.x + theSize.width - CGRectGetMaxX(displayArea));
+ theOffset.x = CGRectGetMaxX(displayArea) - theSize.width;
}
//Cap the arrow offset
@@ -215,12 +215,12 @@ permittedArrowDirections:(UIPopoverArrowDirection)permittedArrowDirections
theOffset = CGPointMake(anchorPoint.x - xArrowOffset - downArrowImage.size.width / 2, anchorPoint.y - yArrowOffset - downArrowImage.size.height);
theBgRect = CGRectMake(0, 0, theSize.width, theSize.height);
- if (theOffset.x < 0) {
- xArrowOffset += theOffset.x;
- theOffset.x = 0;
- } else if (theOffset.x + theSize.width > displayArea.size.width) {
- xArrowOffset += (theOffset.x + theSize.width - displayArea.size.width);
- theOffset.x = displayArea.size.width - theSize.width;
+ if (theOffset.x < CGRectGetMinX(displayArea)) {
+ xArrowOffset += theOffset.x - CGRectGetMinX(displayArea);
+ theOffset.x = CGRectGetMinX(displayArea);
+ } else if (theOffset.x + theSize.width > CGRectGetMaxX(displayArea)) {
+ xArrowOffset += (theOffset.x + theSize.width - CGRectGetMaxX(displayArea));
+ theOffset.x = CGRectGetMaxX(displayArea) - theSize.width;
}
//Cap the arrow offset
@@ -240,12 +240,12 @@ permittedArrowDirections:(UIPopoverArrowDirection)permittedArrowDirections
theOffset = CGPointMake(anchorPoint.x - xArrowOffset, anchorPoint.y - yArrowOffset - leftArrowImage.size.height / 2);
theBgRect = CGRectMake(0, 0, theSize.width, theSize.height);
- if (theOffset.y < 0) {
- yArrowOffset += theOffset.y;
- theOffset.y = 0;
- } else if (theOffset.y + theSize.height > displayArea.size.height) {
- yArrowOffset += (theOffset.y + theSize.height - displayArea.size.height);
- theOffset.y = displayArea.size.height - theSize.height;
+ if (theOffset.y < CGRectGetMinY(displayArea)) {
+ yArrowOffset += theOffset.y - CGRectGetMinY(displayArea);
+ theOffset.y = CGRectGetMinY(displayArea);
+ } else if (theOffset.y + theSize.height > CGRectGetMaxY(displayArea)) {
+ yArrowOffset += (theOffset.y + theSize.height - CGRectGetMaxY(displayArea));
+ theOffset.y = CGRectGetMaxY(displayArea) - theSize.height;
}
//Cap the arrow offset
@@ -265,12 +265,12 @@ permittedArrowDirections:(UIPopoverArrowDirection)permittedArrowDirections
theOffset = CGPointMake(anchorPoint.x - xArrowOffset - rightArrowImage.size.width, anchorPoint.y - yArrowOffset - rightArrowImage.size.height / 2);
theBgRect = CGRectMake(0, 0, theSize.width, theSize.height);
- if (theOffset.y < 0) {
- yArrowOffset += theOffset.y;
- theOffset.y = 0;
- } else if (theOffset.y + theSize.height > displayArea.size.height) {
- yArrowOffset += (theOffset.y + theSize.height - displayArea.size.height);
- theOffset.y = displayArea.size.height - theSize.height;
+ if (theOffset.y < CGRectGetMinY(displayArea)) {
+ yArrowOffset += theOffset.y - CGRectGetMinY(displayArea);
+ theOffset.y = CGRectGetMinY(displayArea);
+ } else if (theOffset.y + theSize.height > CGRectGetMaxY(displayArea)) {
+ yArrowOffset += (theOffset.y + theSize.height - CGRectGetMaxY(displayArea));
+ theOffset.y = CGRectGetMaxY(displayArea) - theSize.height;
}
//Cap the arrow offset