選択した行のこれらの2行を非表示にするにはどうすればよいですか?
[[pickerview.subviews objectAtIndex:1] setHidden:TRUE];
[[pickerview.subviews objectAtIndex:2] setHidden:TRUE];
titleForRow
のviewForRow
またはpickerView
デリゲートメソッドでこれを使用します。
他の回答に基づいて、サブビューを列挙することにし、行の高さが0.5
したがって、私のソリューションはSwiftで次のようになります。
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
pickerView.subviews.forEach({
$0.hidden = $0.frame.height < 1.0
})
return myRowCount
}
そしてObjective-Cでは
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
[pickerView.subviews enumerateObjectsUsingBlock:^(UIView *subview, NSUInteger idx, BOOL *stop) {
subview.hidden = (CGRectGetHeight(subview.frame) < 1.0)
}];
return myRowCount
}
明らかに特に将来の証明ではありませんが、特定のインデックスでサブビューを非表示にすることよりもおそらくそうです。
編集: @Lorisが提供するケースを処理するために更新
これは、iOS 9 BetaのSwiftで機能しました。
datePicker.subviews[0].subviews[1].hidden = true
datePicker.subviews[0].subviews[2].hidden = true
Swift 3バージョン(Working):
pickerView.subviews[1].isHidden = true
pickerView.subviews[2].isHidden = true
Ios7より前に機能しています。
pickerView.showsSelectionIndicator = NO;
ios7の詳細については、このドキュメントを参照してください
func numberOfComponents(in pickerView: UIPickerView) -> Int
{
pickerView.subviews.forEach({
$0.isHidden = $0.frame.height < 1.0
})
return 1
}
Swift 4.2
2行のコードを、pickerViewのtitleForRowまたはviewForRowデリゲートメソッドに貼り付けます。
pickerView.subviews[1].isHidden = true
pickerView.subviews[2].isHidden = true
そして、あなたは行ってもいいはずです。
これは簡単に実現できます。 PickerViewを行の目的のサイズでScrollView内に配置し、picker delegate(pickerView:rowHeightForComponent :)メソッドを使用して、ピッカーの行の高さをScrollViewより少し大きく変更します。そのように、線は非表示になります。
これを簡単なトリックで解決しました。ビューにピッカービューを配置し、このビューのクリップサブビュープロパティをtrueに設定します。ここで、ピッカービューで行の高さ=コンテナービューの高さを設定すると、線が消えます。
Apple何かを変更することを決定した場合に備えて、もう少し将来の証明にするために、別のアプローチを選択しました
for subview in setPickerView.subviews{
if subview.frame.Origin.y != 0{
subview.isHidden = true
}
}
(アイテムを含むsubView)のOrigin yの位置は0であるため、インデックスの範囲外エラーを危険にさらすことなく、他のものを安全に隠すことができます。
楽しい
編集:私はそれをviewDidLayoutSubviewsメソッドに入れたことを伝えるのを忘れていました!
このコードをviewdidloadメソッドに書くだけです
[[PickerView.subviews objectAtIndex:1] setHidden:TRUE];
[[PickerView.subviews objectAtIndex:2] setHidden:TRUE];
Ios7では、UIPickerViewの個別の行を非表示にすることはできず、このページからそれを知ることができます。 https://developer.Apple.com/library/ios/documentation/UIKit/Reference/UIPickerView_Class/index.html #// Apple_ref/occ/instm/UIPickerView/showsSelectionIndicator
ただし、2つのUIViewを追加してそれをカバーすることができ、2つのUIViewの幅は1です。ここにいくつかのサンプルコードがあります。
s_leftLine = [[UIView alloc] initWithFrame:CGRectMake(s_pickerView.frame.size.height/2,
s_pickerView.frame.size.width/2 - kWidthOfPickerPage/2 + 1,
1,
s_pickerView.frame.size.height)];
s_leftLine.backgroundColor = [UIColor whiteColor];
s_leftLine.layer.zPosition = s_pickerView.layer.zPosition + 1; // make sure the line is on the top
[s_pickerView addSubview:s_leftLine];
[OK]を、これははるかに良いでしょう:]誰かがより良い答えを共有するためにそれを書き留めてください:)