此代码在ios10中可以正常工作。我得到我的标签和一个图像按钮,该按钮是用户照片资料,圆形。.好的。但是当运行xcode 9 ios11模拟器时,我将其拉长了。当检查sim并获取视图并告诉xcode描述视图时,按钮帧必须为32x32,我将输出为170x32或类似的东西。
这是我的代码。
let labelbutton = UIButton( type: .system) labelbutton.addTarget(self, action:#selector(self.toLogin(_:)), for: .touchUpInside) labelbutton.setTitleColor(UIColor.white, for: .normal) labelbutton.contentHorizontalAlignment = .right labelbutton.titleLabel?.font = UIFont.systemFont(ofSize: 18.00) let button = UIButton(type: .custom) button.addTarget(self, action:#selector(self.toLogin(_:)), for: .touchUpInside) button.frame = CGRect(x: 0, y: 0, width: 32, height: 32) button.setTitleColor(UIColor.white, for: .normal) button.setTitleColor(UIColor.white, for: .highlighted) var buttomItem : UIBarButtonItem = UIBarButtonItem() buttomItem.customView = button buttomItem.target = self buttomItem.action = "ToLogin" var labelItem : UIBarButtonItem = UIBarButtonItem() labelItem.customView = labelbutton labelItem.target = self labelItem.action = "ToLogin" if let user = PFUser.current() { print("LOGIN : checkiando si existe usuario ") labelbutton.setTitle(USERNAME, for: UIControlState.normal) labelbutton.sizeToFit() if(user["profile_photo_url"] != nil) { print(" ENCONTRO PROFILE PHOTO URL NOT NIL Y ES \(user["profile_photo_url"])") let photoURL = user["profile_photo_url"] as! String let a = LoginService.sharedInstance a.downloadImage(url: photoURL, complete: { (complete) in if (complete) { button.setImage(LoginService.sharedInstance.profile_photo! , for: UIControlState.normal) button.layer.cornerRadius = 0.5 * button.bounds.size.width // button.imageView!.contentMode = .scaleAspectFit // button.imageView!.frame = CGRect(x: 0, y: 0, width: 40, height: 40) //button.imageView!.contentMode = .scaleAspectFit //button.imageView!.clipsToBounds = true //button.imageView!.layer.cornerRadius = 60 button.clipsToBounds = true self.NavigationItem.rightBarButtonItems = [buttomItem,labelItem] } }) } else { self.NavigationItem.rightBarButtonItem = labelItem } print(" EL FRAME DEL BUTTON ES \(button.frame)") } else { labelbutton.setTitle("Login", for: UIControlState.normal) labelbutton.sizeToFit() self.NavigationItem.rightBarButtonItem = labelItem }
原因
出现问题是因为从ios 11 UIBarButtonItem使用自动布局而不是处理帧。
UIBarButtonItem
解
如果使用Xcode 9,则应为此图像按钮添加宽度约束。
button.widthAnchor.constraint(equalToConstant: 32.0).isActive = true button.heightAnchor.constraint(equalToConstant: 32.0).isActive = true
聚苯乙烯
button不是UIBarButtonItem,它在UIButton内部UIBarButtonItem。您不应为设置约束UIBarButtonItem,而应为其中的元素设置约束。
button
UIButton