gpt4 book ai didi

ios - 使用自定义 iPad 弹出框将箭头与内容 View 对齐

转载 作者:行者123 更新时间:2023-11-29 13:10:07 25 4
gpt4 key购买 nike

我通过子类化 UIPopoverBackgroundView 来自定义弹出窗口的外观。一切正常,除了在某些情况下箭头和内容 View 之间存在间隙。如果我一直旋转设备以关闭弹出窗口,然后将其重新打开,有时它们会排成一行,而有些则不会。我正在记录帧大小并且它们始终相同,所以我不知道发生了什么。我在下面附上屏幕截图和我的 layoutSubviews 代码。

你看到我在箭头方向向右的情况下减去 4,这是基于至少在某些时候让它工作的试验和错误。我讨厌这样的编码,因为我不确定这个 4 点的空间是什么,以及为什么我在所有箭头方向的情况下都不需要它,例如。

在图像中,第一个镜头显示了问题。这发生在弹出窗口的随机触发上。下图显示它在应用程序的同一执行中稍后触发时随机工作。

另外值得一提的是,我在 http://blog.teamtreehouse.com/customizing-the-design-of-uipopovercontroller 找到了一些示例代码并尝试了此版本的 layoutSubviews,尽管它已经与我所拥有的非常相似。即使使用这段代码,我仍然遇到同样的问题。

编辑:值得一提的是,从我的屏幕截图中可能很明显,但我没有为我的弹出框添加边框:

+ (UIEdgeInsets)contentViewInsets
{
return UIEdgeInsetsMake(0.0f, 0.0f, 0.0f, 0.0f);
}

可能还值得一提的是,我没有为我的箭头图像使用图像文件,而是自定义绘制它。再说一次,即使我注释掉了绘图,我仍然遇到问题,所以我认为它不相关,但想提及它以进行全面披露。

非常感谢任何帮助。谢谢。

CGSize arrowSize = CGSizeMake(kCMAPopoverBackgroundViewArrowBase, kCMAPopoverBackgroundViewArrowHeight);
// Leaving code out for drawArrowImage - even when I leave the arrowImageView as
// an empty image view and set a non-clear background color this gap is still
// sporadically showing up
self.arrowImageView.image = [self drawArrowImage:arrowSize];

float arrowXCoordinate = 0.0f;
float arrowYCoordinate = 0.0f;
CGAffineTransform arrowRotation = CGAffineTransformIdentity;

float borderMargin = 2.0f;

switch (self.arrowDirection) {
case UIPopoverArrowDirectionUp:
arrowXCoordinate = ((self.bounds.size.width / 2.0f) - (arrowSize.width / 2.0f));
arrowYCoordinate = 0.0f;
break;

case UIPopoverArrowDirectionDown:
arrowXCoordinate = ((self.bounds.size.width / 2.0f) - (arrowSize.width / 2.0f));
arrowYCoordinate = self.bounds.size.height - arrowSize.height;
arrowRotation = CGAffineTransformMakeRotation(M_PI);
break;

case UIPopoverArrowDirectionLeft:
arrowXCoordinate = 0.0f - (arrowSize.height / 2.0f) + borderMargin;
arrowYCoordinate = ((self.bounds.size.height / 2.0f) - (arrowSize.height / 2.0f));
arrowRotation = CGAffineTransformMakeRotation(-M_PI_2);
break;

case UIPopoverArrowDirectionRight:
arrowXCoordinate = self.bounds.size.width - arrowSize.height - 4.0f;
arrowYCoordinate = ((self.bounds.size.height / 2.0f) - (arrowSize.height / 2.0f));
arrowRotation = CGAffineTransformMakeRotation(M_PI_2);
break;

default:
break;

}

self.arrowImageView.frame = CGRectMake(arrowXCoordinate, arrowYCoordinate, arrowSize.width, arrowSize.height);
[self.arrowImageView setTransform:arrowRotation];

Here is an example of the issue happening on a random occurrence

This is an example of it not happening on another random occurrence on the

最佳答案

您的箭头图像是方形的吗?如果不是,我猜变换会稍微影响它的框架,这会产生意想不到的差距。

关于ios - 使用自定义 iPad 弹出框将箭头与内容 View 对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17595652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com