Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 设置自定义注释视图时';s帧,视图将消失,直到挤压贴图_Ios_Mkmapview_Mkannotationview - Fatal编程技术网

Ios 设置自定义注释视图时';s帧,视图将消失,直到挤压贴图

Ios 设置自定义注释视图时';s帧,视图将消失,直到挤压贴图,ios,mkmapview,mkannotationview,Ios,Mkmapview,Mkannotationview,我自定义了我的MKAnnotationView,当我触摸它时,它会输入以下代码 - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view { CellThumbnailView *thumbnailView = (CellThumbnailView *)view; [mapView setCenterCoordinate:thumbnailView.thumbnai

我自定义了我的MKAnnotationView,当我触摸它时,它会输入以下代码

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {
    CellThumbnailView *thumbnailView = (CellThumbnailView *)view;

    [mapView setCenterCoordinate:thumbnailView.thumbnail.coordinate animated:YES];

    CGSize size = [thumbnailView.thumbnail getThumbnailSize];

    thumbnailView.frame = CGRectMake(0, 0, size.width, size.height);
    thumbnailView.centerOffset = CGPointMake(0, -[thumbnailView.thumbnail getThumbnailCenterOffset] + size.height / 2);

    // Center map at annotation point
    thumbnailView.imageView.center = CGPointMake(size.width / 2, size.height/ 2);
    thumbnailView.imageView.bounds = CGRectMake(0, 0, size.width, size.height);
    thumbnailView.imageView.image = [UIImage imageNamed:[thumbnailView.thumbnail getPopupImageName]];

    CGSize labelOffset = [thumbnailView.thumbnail getThumbnailLabelOffset];
    thumbnailView.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 45, 20)];
    thumbnailView.titleLabel.backgroundColor = [UIColor clearColor];
    thumbnailView.titleLabel.textColor = [UIColor blueColor];
    thumbnailView.titleLabel.shadowColor = [UIColor colorWithWhite:1 alpha:0.5];
    thumbnailView.titleLabel.shadowOffset = CGSizeMake(0, -1);
    thumbnailView.titleLabel.font = [UIFont boldSystemFontOfSize:17];
    thumbnailView.titleLabel.alpha = 1;
    thumbnailView.titleLabel.minimumScaleFactor = .8f;
    thumbnailView.titleLabel.adjustsFontSizeToFitWidth = YES;
    thumbnailView.titleLabel.center = CGPointMake(thumbnailView.center.x - labelOffset.width, thumbnailView.center.y - labelOffset.height);
    thumbnailView.titleLabel.text = [NSString stringWithFormat:@"%dG", thumbnailView.thumbnail.traffic];
    [thumbnailView addSubview:thumbnailView.titleLabel];

    self.location.text = thumbnailView.thumbnail.desc;
    self.traffic.text = thumbnailView.titleLabel.text;
    self.reportView.hidden = NO;
}
如果您注意到这一点:

thumbnailView.frame = CGRectMake(0, 0, size.width, size.height);
这意味着我想将我的缩略图更改为大缩略图,所以我更改了边框。
但随着画面的变化,当我触摸视图时,它消失了。
但放大或缩小后,它会再次显示

奇怪的是:当我移除框架更改时,问题就消失了


我想知道为什么以及如何解决此问题(如果可能,我仍然需要更改框架)。

更改框架后,您是否尝试调用
[thumbnailView LayoutSubview]
?我有一个类似的问题,我的观点只是消失后,帧的变化,直到地图被触摸/缩放/什么。这是让autolayout发挥其魔力所缺少的链接

更新
事实上,这可能是在转移注意力。对我来说,似乎最有效的方法是操作MKAnnotationView的
centerOffset
属性,而不是直接操作它的
frame
。对
frame
执行操作会导致奇怪的效果,原点瞬间“重置”为
0,0
,只有在触摸地图时才恢复正常。最后,我使用了
centerOffset
,调整了子视图的帧,并使用了hittesting使子视图中的交互正常工作

这对我起了作用

CGSize size = [self customSize];

if (!CGSizeEqualToSize(size, self.frame.size))
{
    [self setFrame:CGRectMake(0, 0, size.width, size.height)];
}

一次设置框架解决了任何问题,为iOS7构建不会显示此问题。

您找到解决方案了吗?在swift 3 ios 9+中面临同样的问题。使用自动布局。