Tem*_*lar 14 iphone mapkit mkmapview ios ios8
我想将Legal标签移到右侧.在iOS 6和7上,下面的解决方案工作正常,但是在iOS 8.3上似乎不起作用.
我得到了标签,然后用计时器(0.1秒)viewDidLayoutSubviews我调用这个方法:
-(void)moveLegalLabel
{
UIView * legalLink = [self attributionView];
legalLink.frame = CGRectMake(self.mapView.frame.size.width - legalLink.frame.size.width - 10, self.mapView.frame.size.height - legalLink.frame.size.height - 10 , legalLink.frame.size.width, legalLink.frame.size.height);
legalLink.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin;
}
Run Code Online (Sandbox Code Playgroud)
它可以很好地用于旋转等.但是一旦我滚动地图,标签就会跳回到左边.试图在这个方法中调用这个方法,regionDidChangeAnimated但是标签首先向左跳,然后向右跳,这真的很烦人......
我怎么能强迫那个愚蠢的标签留在右侧?
Christian建议的解决方案:
moveLegalLabel代码移到那里layoutSubviews-(void)layoutSubviews
{
[super layoutSubviews];
[self moveLegalLabel];
}
您需要它在viewDidAppear和两个MKMapViewDelegate方法中.如果你没有将它放在两个委托方法中,你将获得你所看到的跳跃.就这样!
-(void)viewDidAppear:(BOOL)animated
{
[self moveLegalLabel];
}
- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
[self moveLegalLabel];
}
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
[self moveLegalLabel];
}
-(void)moveLegalLabel
{
UIView * legalLink = [self.map.subviews objectAtIndex:1];
legalLink.frame = CGRectMake(self.map.frame.size.width - legalLink.frame.size.width - 10, self.map.frame.size.height - legalLink.frame.size.height - 10 , legalLink.frame.size.width, legalLink.frame.size.height);
legalLink.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
Swift 4 示例:
在 iOS 11 上工作
不需要子类
(基于埃里克的回答)
func viewDidAppear(_ animated: Bool) {
moveLegalLabel()
}
func mapView(_ mapView: MKMapView, regionWillChangeAnimated animated: Bool) {
moveLegalLabel()
}
func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
moveLegalLabel()
}
func moveLegalLabel() {
let legalLabel: UIView = mapView.subviews[1]
legalLabel.frame=CGRect(x: mapView.frame.size.width - (legalLabel.frame.size.width ?? 0.0) - 10, y: mapView.frame.size.height - (legalLabel.frame.size.height ?? 0.0) - 10, width: legalLabel.frame.size.width ?? 0.0, height: legalLabel.frame.size.height ?? 0.0)
}
Run Code Online (Sandbox Code Playgroud)
-viewDidAppear:像其他人建议的那样,像、-mapView:regionWillChangeAnimated:或 之类的钩子-mapView:regionDidChangeAnimated:不适合此目的。
您最好的选择是在调用后MKMapView对标签进行子类化和布局。-layoutSubviews super
| 归档时间: |
|
| 查看次数: |
1553 次 |
| 最近记录: |