是否可以自动调整UILabel框/边界的大小以适应包含的文本?(我不在乎它是否比显示器大)
因此,如果用户输入"你好"或"我的名字真的很长,我希望它适合这个盒子",它永远不会被截断,标签会相应地"加宽"吗?
我看过很多改变UILabel大小的例子.
这是我想要做的:更改字体大小,以便文本在新高度内尽可能大.
有线索吗?
我正在编写一个基本的音乐播放器应用程序但在处理应用程序状态转换时遇到一些问题.
我正在使用Swift 3和MPMusicPlayerController.systemMusicPlayer()
目标是这样的:
1)当用户点击主页按钮并且应用程序进入bg(工作)时保持音乐播放
2)如果用户退出应用程序,则停止播放器(myMP.stop())(有时工作,其他时间抛出错误)
我根据可能的操作使用print语句跟踪了流程并得到了:
流程2是我所期望的,但是当应用程序关闭时,Flow 1会抛出一个错误 - 我希望"会终止".
编辑:主要问题是当使用流程1退出应用程序时,永远不会调用"将终止" - 因此永远不会调用"myMP.stop()"并且应用程序退出后播放器继续播放.
如果您在应用程序处于活动状态时单击Home一次(Flow 1)或double(Flow 2),则行为会有明显的不同.
为什么会采用哪两个不同的反应应该是相同的动作?
编辑:最重要的是,如果它永远不会"终止",如何停止MediaPlayer for Flow 1?
编辑:
以下是一些复制问题的示例代码:
AppDelegate.swift
//
// AppDelegate.swift
// Jumbo Player
//
import UIKit
//import MediaPlayer
//doesn't matter where this is declared - here or in ViewController - same results
//let myMP:MPMusicPlayerController = MPMusicPlayerController.systemMusicPlayer()
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Xcode 4.2中为我的项目添加自定义字体,但每当我尝试使用它时,我都会收到对象为零的错误.
我已经完成了以下操作:
1)在我的.plist'为应用程序提供的字体中添加了一行'value:"LCDMono2 Ultra.ttf"
2)在我的支持文件中添加了字体并在XCode中显示它以验证它是否已添加.
3)使用获取信息验证全名是"LCDMono2 Ultra"
4)在我的项目中创建字体:
UIFont *myFont = [UIFont fontWithName:@"LCDMono2 Ultra" size:16];
Run Code Online (Sandbox Code Playgroud)
我尝试过这个变种:
UIFont *myFont = [UIFont fontWithName:@"LCDMono2 Ultra" size:16.f];
Run Code Online (Sandbox Code Playgroud)
5)试图使用字体名称(addObject:myFont.fontName),生成'nil'错误.
可能导致错误的原因是什么?这可能是名字中的空间吗?
从我的应用程序中保存少量数据时,最好使用NSUserDefaults或NSCoding?现在我使用NSCoding(encodeWithCoder/initWithCoder等),但似乎NSUserDefaults可能更简单.我的总数据是关于各种Ints/Strings/MutableArray,总共只有几十个.
我仍然是Objective-C的新手,并且在设置属性时尝试找出使用assign,retain,copy,strong等的适当方法时遇到了一些困难.
例如,我声明了以下类型 - 我应该如何设置属性?
@property (nonatomic, ??) NSMutableArray *myArray
@property (nonatomic, ??) NSString *myString
@property (nonatomic, ??) UIColor *myColor
@property (nonatomic, ??) int *myIn
@property (nonatomic, ??) BOOL *myBOOL
Run Code Online (Sandbox Code Playgroud)
谢谢....
iOS 7,Xcode 5
使用UILabel,此代码有效(自动调整文本以适应):
self.testLabel.numberOfLines=0;
self.testLabel.lineBreakMode=NSLineBreakByWordWrapping;
self.testLabel.adjustsFontSizeToFitWidth=YES;
self.testLabel.minimumScaleFactor=0.1;
self.testLabel.textAlignment=NSTextAlignmentCenter;
[self.testLabel.font fontWithSize:100.0];
Run Code Online (Sandbox Code Playgroud)

但添加"setFont"行会导致它无法缩放字体以适应:
[self.testLabel setFont:[UIFont fontWithName:@"Helvetica Neue" size:62.0f]]; //THIS LINE CAUSES THE FONT SCALING TO FAIL
self.testLabel.numberOfLines=0;
self.testLabel.lineBreakMode=NSLineBreakByWordWrapping;
self.testLabel.adjustsFontSizeToFitWidth=YES;
self.testLabel.minimumScaleFactor=0.1;
self.testLabel.textAlignment=NSTextAlignmentCenter;
[self.testLabel.font fontWithSize:100.0];
Run Code Online (Sandbox Code Playgroud)

有谁知道解决这个问题?
我有一个使用MPMusicPlayerController的音乐应用程序.
我最初使用iOS 9下的systemMusicPlayer选项编写了它.我遇到了一些问题,播放器在某些情况下没有正确关闭所以我切换到appplicationMusicPlayer(请参阅 退出应用程序导致错误"来自调试器的消息:由于信号9终止")
但是,作为一个应用程序播放器,我无法获得很多好处,如控制中心处理,蓝牙数据显示等.
所以,我切换回systemMusicPlayer.我还改为Xcode 9.2和iOS 10.3的编译目标.
现在,当我运行我的应用程序时,它可能需要几秒钟才能响应播放/暂停或下一个/上一个等控件.我的整个用户界面痛苦无反应.
我尝试切换回applicationMusicPlayer,重新编译,确定 - UI处于正常速度.
所以现在我处于一个糟糕的位置 - 使用systemMusicPlayer,该应用程序几乎无法使用,但是使用applicationMusicPlayer我失去了很多功能.
这似乎与我的iPhone上的iOS 11.2.2直接相关,或与iOS 10.3+的目标有关
有没有人知道发生了什么以及如何解决它
编辑:我创建了一个非常基本的播放器,它似乎在任一模式下工作正常,所以现在我很困惑 - 我将测试其他MP命令,看看问题是什么,但因为即使我的UI减慢我不是当然.
编辑2:我相信我发现罪魁祸首是NotificationCenter,并且还从MPMusicPlayerController获取状态.我已经更新了下面显示问题的示例代码.一旦运行,单击"下一步"按钮有时会很慢,但单击"上一步"可能会导致延迟最多两秒!
如果您想创建一个简单的播放器,这是基本代码.务必在故事板中添加三个按钮并相应地连接它们.
//
// ViewController.swift
// junkplayer
//
import UIKit
import MediaPlayer
let notificationCenter = NotificationCenter.default
let myMP:MPMusicPlayerController = MPMusicPlayerController.systemMusicPlayer
//let myMP:MPMusicPlayerController = MPMusicPlayerController.applicationMusicPlayer()
class ViewController: UIViewController {
@IBOutlet weak var xxx: UIButton!
@IBOutlet weak var nextbut: UIButton!
@IBOutlet weak var prevbut: UIButton!
var qrySongs = MPMediaQuery()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup …Run Code Online (Sandbox Code Playgroud) 我正在使用Xcode 10+,Swift 4,并使用MPMediaPlayer定位iOS 11.4+
我想以编程方式淡出播放器的音量(就像Apple退出音乐播放器时那样).同样,我不想在它运行时看到任何东西(比如VolumeView显示).
看起来所有程序化的音量控件都已被弃用.
我已经阅读了很多相关帖子并创建了这个函数,它有几个问题:
@objc func fadeVolume(){
var sliderView = UISlider()
//let volumeView = MPVolumeView(frame: CGRect.init(x: self.view.frame.maxX, y: self.view.frame.maxY, width: 0, height: 0))
let volumeView = MPVolumeView(frame: .zero)
volumeView.clipsToBounds = true
volumeView.showsRouteButton = false
//volumeView.isHidden = true
volumeView.alpha = 0.001
for subview in volumeView.subviews {
if let slider = subview as? UISlider {
sliderView = slider
break
}
}
self.view.addSubview(volumeView)
volumeView.didMoveToSuperview()
let current:Float = AVAudioSession.sharedInstance().outputVolume
print("slider value: \(current)")
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.1) {
UIView.animate(withDuration: 0.4, animations: { …Run Code Online (Sandbox Code Playgroud) 我正在处理 UILabel (iOS7) 中的字体并且遇到了一些我希望有人能解释的事情:字体的 Glyph、Ascender 和 Descender 之间有什么关系?
从我读过的文档中,Ascender 是字体高于基线的部分,Descender 是下面的部分(返回为负数)。组合的绝对值应该是字体的最大高度。

例如,上升器为 255,下降器为 -64 的总高度为 319。但是字形高度返回为 228.4
编辑:这是字形代码:
CTFontRef ctFont = CTFontCreateWithName((__bridge CFStringRef)(uiFont.fontName), uiFont.pointSize, NULL);
UniChar ch = [msgLabel.text characterAtIndex:0];
CGGlyph glyph;
if (CTFontGetGlyphsForCharacters (ctFont, &ch, &glyph, 1)) {
CGRect bounds = CTFontGetBoundingRectsForGlyphs (ctFont, kCTFontOrientationDefault, &glyph, nil, 1);
float glyphHeight = bounds.size.height;
}
Run Code Online (Sandbox Code Playgroud)
这是上升器/下降器代码:
float adHeight = myLabel.font.ascender-myLabel.font.descender; //Descender is always a negative value
Run Code Online (Sandbox Code Playgroud)
那么为什么从 CTFontGetBoundingRectsForGlyphs 返回的 Glyph 高度不等于 Ascender 加 Descender?