lor*_*lez 99 ios swift swift4 ios11 xcode9-beta
此代码在ios10中正常工作.我得到我的标签和图像按钮,这是用户照片配置文件,圆形圆形..好的.但是当运行xcode 9 ios11模拟器时,我将它拉出来.按钮框必须是32x32,当检查SIM并获取视图并告诉xcode描述视图时,我得到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
}
Run Code Online (Sandbox Code Playgroud)
Vla*_*bir 182
原因
问题出现是因为从ios 11 UIBarButtonItem使用autolayout而不是处理帧.
解
如果使用Xcode 9,则应为此图像按钮添加宽度约束.
button.widthAnchor.constraint(equalToConstant: 32.0).isActive = true
button.heightAnchor.constraint(equalToConstant: 32.0).isActive = true
Run Code Online (Sandbox Code Playgroud)
PS
button不是UIBarButtonItem,它在UIButton里面UIBarButtonItem.您应该UIBarButtonItem为其中的元素设置约束,而不是设置约束.
lor*_*lez 53
谢谢大家的贡献!你们是对的!对于xcode9 ios11,你需要设置一个约束.
let widthConstraint = button.widthAnchor.constraint(equalToConstant: 32)
let heightConstraint = button.heightAnchor.constraint(equalToConstant: 32)
heightConstraint.isActive = true
widthConstraint.isActive = true
Run Code Online (Sandbox Code Playgroud)
Ahm*_*rag 18
好吧,新的barButtonItem使用autolayout而不是处理帧.
您添加到按钮的图像大于按钮大小本身.这就是按钮本身被拉伸到图像大小的原因.在将图像添加到按钮之前,您必须调整图像大小以匹配所需按钮的大小.
SHS*_*SHS 18
目标C代码现在已经过时了.但是对于必须在iOS 11中构建/维护Objective C项目的用户来说,从Swift(Karoly Nyisztor回答)到Objective C的翻译有用.
// UIView+Navbar.h
#import <UIKit/UIKit.h>
@interface UIView (Navbar)
- (void)applyNavBarConstraints:(CGFloat)width height:(CGFloat)height;
@end
//----------
// UIView+Navbar.m
#import "UIView+Navbar.h"
@implementation UIView (Navbar)
- (void)applyNavBarConstraints:(CGFloat)width height:(CGFloat)height
{
if (width == 0 || height == 0) {
return;
}
NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:height];
NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:width];
[heightConstraint setActive:TRUE];
[widthConstraint setActive:TRUE];
}
//----------
// Usage :-
[button applyNavBarConstraints:33 height:33];
Run Code Online (Sandbox Code Playgroud)
Kar*_*tor 14
我写了一个小扩展来设置导航栏项的约束:
import UIKit
extension UIView {
func applyNavBarConstraints(size: (width: CGFloat, height: CGFloat)) {
let widthConstraint = self.widthAnchor.constraint(equalToConstant: size.width)
let heightConstraint = self.heightAnchor.constraint(equalToConstant: size.height)
heightConstraint.isActive = true
widthConstraint.isActive = true
}
}
// Usage
button.applyNavBarConstraints(size: (width: 33, height: 33))
Run Code Online (Sandbox Code Playgroud)
Ale*_*eem 12
我在目标中使用以下行完成此操作:
NSLayoutConstraint * widthConstraint = [customButton.widthAnchor constraintEqualToConstant:40];
NSLayoutConstraint * HeightConstraint =[customButton.heightAnchor constraintEqualToConstant:40];
[widthConstraint setActive:YES];
[HeightConstraint setActive:YES];
UIBarButtonItem* customBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:customButton];
self.navigationItem.leftBarButtonItem = customBarButtonItem;
Run Code Online (Sandbox Code Playgroud)
谢谢快乐编码!!
我做了什么?
在我的应用程序中,我在rightBarButton项目的navigationBar上添加了个人资料图片.在iOS 11之前,它运行良好并且显示正常但是当更新到iOS 11时,然后改变行为就像打击一样
所以我添加UIView了右键项目并设置UIButton为子视图UIView?如下,
我设置了高度和宽度限制UIButton.
我的问题解决了.不要忘记将UIView背景颜色设置为清晰的颜色.
注意:如果你的按钮不起作用,那么检查你的
UIView's身高可能是0 ,你应该改变身高0到44或任何你想要的.而且clipToBound = true,现在你可以设置你的按钮的位置,它将运作良好.
更改widthAnchor/ heightAnchor仅适用于iOS 11+设备.对于iOS 10设备,您需要采用手动更改帧的经典方式.问题是两种方法都不适用于这两种版本,因此您绝对需要根据运行时版本以编程方式进行交替,如下所示:
if #available(iOS 11.0, *)
{
button.widthAnchor.constraint(equalToConstant: 32.0).isActive = true
button.heightAnchor.constraint(equalToConstant: 32.0).isActive = true
}else
{
var frame = button.frame
frame.size.width = 32.0
frame.size.height = 32.0
button.frame = frame
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37316 次 |
| 最近记录: |